diff --git a/my-library/src/App.jsx b/my-library/src/App.jsx index 0b72acb..ff39111 100644 --- a/my-library/src/App.jsx +++ b/my-library/src/App.jsx @@ -7,6 +7,7 @@ import Profile from './pages/Profile'; import NotFound from './pages/NotFound'; import AddBook from './pages/AddBook'; import BookDetail from './pages/BookDetail'; +import Customers from './pages/Customers'; export default function App() { return ( @@ -19,6 +20,7 @@ export default function App() { } /> } /> } /> + } /> ); diff --git a/my-library/src/api/books.jsx b/my-library/src/api/books.js similarity index 100% rename from my-library/src/api/books.jsx rename to my-library/src/api/books.js diff --git a/my-library/src/api/client.jsx b/my-library/src/api/client.js similarity index 100% rename from my-library/src/api/client.jsx rename to my-library/src/api/client.js diff --git a/my-library/src/api/customers.js b/my-library/src/api/customers.js new file mode 100644 index 0000000..114d6ad --- /dev/null +++ b/my-library/src/api/customers.js @@ -0,0 +1,9 @@ +import client from './client'; + +export function registerCustomer(customer) { + return client.post('/api/customers', customer); +} + +export function findCustomerByPhone(phoneNumber) { + return client.get(`/api/customers/phone/${encodeURIComponent(phoneNumber)}`); +} \ No newline at end of file diff --git a/my-library/src/pages/AddBook.jsx b/my-library/src/pages/AddBook.jsx index 5266ab9..5f97471 100644 --- a/my-library/src/pages/AddBook.jsx +++ b/my-library/src/pages/AddBook.jsx @@ -35,7 +35,7 @@ export default function AddBook() { registerBook(payload) .then((response) => { - setMessage({ type: 'success', text: `Livre créé (id : ${response.data}) ✅` }); + setMessage({ type: 'success', text: `Livre créé (id : ${response.data})` }); setForm(initialForm); }) .catch((error) => { diff --git a/my-library/src/pages/Customers.jsx b/my-library/src/pages/Customers.jsx new file mode 100644 index 0000000..0475a08 --- /dev/null +++ b/my-library/src/pages/Customers.jsx @@ -0,0 +1,90 @@ +import { useState } from 'react'; +import { registerCustomer, findCustomerByPhone } from '../api/customers'; + +const initialForm = { firstName: '', lastName: '', phoneNumber: '' }; + +export default function Customers() { + const [form, setForm] = useState(initialForm); + const [registerMsg, setRegisterMsg] = useState(null); + const [submitting, setSubmitting] = useState(false); + + function handleChange(e) { + const { name, value } = e.target; + setForm((prev) => ({ ...prev, [name]: value })); + } + + function handleRegister(e) { + e.preventDefault(); + setSubmitting(true); + setRegisterMsg(null); + registerCustomer(form) + .then((response) => { + setRegisterMsg(`Client créé (id : ${response.data})`); + setForm(initialForm); + }) + .catch((error) => { + console.error(error); + setRegisterMsg('Erreur lors de la création du client.'); + }) + .finally(() => setSubmitting(false)); + } + + const [phone, setPhone] = useState(''); + const [customer, setCustomer] = useState(null); + const [searchError, setSearchError] = useState(null); + + function handleSearch(e) { + e.preventDefault(); + setSearchError(null); + setCustomer(null); + findCustomerByPhone(phone) + .then((response) => setCustomer(response.data)) + .catch((error) => { + console.error(error); + setSearchError('Aucun client trouvé avec ce numéro.'); + }); + } + + return ( +
+

Gestion des clients

+ +
+

Enregistrer un client

+
+ + + + +
+ {registerMsg &&

{registerMsg}

} +
+ +
+

Rechercher un client

+
+ + +
+ {searchError &&

{searchError}

} + {customer && ( +
+

{customer.firstName} {customer.lastName}

+

Téléphone : {customer.phoneNumber}

+

Points de fidélité : {customer.loyaltyPoints}

+
+ )} +
+
+ ); +} \ No newline at end of file