diff --git a/my-library/package-lock.json b/my-library/package-lock.json
index ecd3eb6..cbb09ed 100644
--- a/my-library/package-lock.json
+++ b/my-library/package-lock.json
@@ -12,6 +12,7 @@
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^13.5.0",
+ "axios": "^1.17.0",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-router-dom": "^7.13.1",
@@ -4804,6 +4805,34 @@
"node": ">=4"
}
},
+ "node_modules/axios": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz",
+ "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.16.0",
+ "form-data": "^4.0.5",
+ "https-proxy-agent": "^5.0.1",
+ "proxy-from-env": "^2.1.0"
+ }
+ },
+ "node_modules/axios/node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/axobject-query": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
@@ -8090,9 +8119,9 @@
"license": "ISC"
},
"node_modules/follow-redirects": {
- "version": "1.15.11",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
- "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"funding": [
{
"type": "individual",
@@ -13456,6 +13485,15 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/psl": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
diff --git a/my-library/package.json b/my-library/package.json
index 89fc2ed..78ab8fe 100644
--- a/my-library/package.json
+++ b/my-library/package.json
@@ -7,6 +7,7 @@
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^13.5.0",
+ "axios": "^1.17.0",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-router-dom": "^7.13.1",
diff --git a/my-library/src/api/books.jsx b/my-library/src/api/books.jsx
new file mode 100644
index 0000000..60a4c3a
--- /dev/null
+++ b/my-library/src/api/books.jsx
@@ -0,0 +1,5 @@
+import client from './client';
+
+export function getBooks(page = 0, size = 20) {
+ return client.get('/api/books', { params: { page, size } });
+}
\ No newline at end of file
diff --git a/my-library/src/api/client.jsx b/my-library/src/api/client.jsx
new file mode 100644
index 0000000..f3c220b
--- /dev/null
+++ b/my-library/src/api/client.jsx
@@ -0,0 +1,7 @@
+import axios from 'axios';
+
+const client = axios.create({
+ baseURL: 'http://localhost:8080',
+});
+
+export default client;
\ No newline at end of file
diff --git a/my-library/src/pages/Books.jsx b/my-library/src/pages/Books.jsx
index 7ff328f..21b2ebb 100644
--- a/my-library/src/pages/Books.jsx
+++ b/my-library/src/pages/Books.jsx
@@ -1,3 +1,39 @@
+import { useState, useEffect } from 'react';
+import { getBooks } from '../api/books';
+
export default function Books() {
- return Catalogue
;
+ const [books, setBooks] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+
+ useEffect(() => {
+ getBooks()
+ .then((response) => {
+ console.log(response.data);
+ setBooks(response.data.content);
+ })
+ .catch((err) => {
+ console.error(err);
+ setError("Impossible de charger les livres.");
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ }, []);
+
+ if (loading) return Chargement…
;
+ if (error) return {error}
;
+
+ return (
+
+ Catalogue
+
+ {books.map((book) => (
+ -
+ {book.title} - {book.author}
+
+ ))}
+
+
+ );
}
\ No newline at end of file
diff --git a/mylibrary-0.0.1-SNAPSHOT.jar b/mylibrary-0.0.1-SNAPSHOT.jar
index 1d0bd39..71d09f3 100644
Binary files a/mylibrary-0.0.1-SNAPSHOT.jar and b/mylibrary-0.0.1-SNAPSHOT.jar differ