From 3b28432aeabe8cf0398d2bbf16bada478f1a0757 Mon Sep 17 00:00:00 2001 From: Valentin <valentin.henriques@etu.univ-amu.fr> Date: Sat, 9 Dec 2023 22:53:49 +0100 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20toutes=20les=20routes=20fonctio?= =?UTF-8?q?nnelles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/database.db | Bin 16384 -> 16384 bytes index.js | 34 ++++++++++++-- migrations/001-db.sql | 11 ++--- src/DAO/MonkeyDbDAO.js | 37 ++++++++++++--- src/DAO/SpeciesDbDAO.js | 42 ++++++++++++++--- src/interfaces/IMonkeyDAO.js | 4 ++ src/interfaces/ISpeciesDAO.js | 4 ++ src/routes/deleteRoutes/monkeyDeleteAll.js | 15 ++++++ src/routes/deleteRoutes/monkeyDeleteById.js | 18 +++++++ src/routes/deleteRoutes/speciesDeleteAll.js | 15 ++++++ src/routes/deleteRoutes/speciesDeleteById.js | 17 +++++++ src/routes/findRoutes/monkeyFindAll.js | 16 +++++++ src/routes/findRoutes/monkeyFindById.js | 17 +++++++ src/routes/findRoutes/speciesFindAll.js | 15 ++++++ src/routes/findRoutes/speciesFindById.js | 17 +++++++ src/routes/modifierRoute/insertMonkey.js | 17 +++++++ src/routes/modifierRoute/insertSpecies.js | 17 +++++++ src/routes/modifierRoute/updateMonkey.js | 17 +++++++ src/routes/modifierRoute/updateSpecies.js | 16 +++++++ test_monkey_insert.json | 47 +++++++++++++++++++ test_species_insert.json | 42 +++++++++++++++++ 21 files changed, 396 insertions(+), 22 deletions(-) create mode 100644 src/routes/deleteRoutes/monkeyDeleteAll.js create mode 100644 src/routes/deleteRoutes/monkeyDeleteById.js create mode 100644 src/routes/deleteRoutes/speciesDeleteAll.js create mode 100644 src/routes/deleteRoutes/speciesDeleteById.js create mode 100644 src/routes/findRoutes/monkeyFindAll.js create mode 100644 src/routes/findRoutes/monkeyFindById.js create mode 100644 src/routes/findRoutes/speciesFindAll.js create mode 100644 src/routes/findRoutes/speciesFindById.js create mode 100644 src/routes/modifierRoute/insertMonkey.js create mode 100644 src/routes/modifierRoute/insertSpecies.js create mode 100644 src/routes/modifierRoute/updateMonkey.js create mode 100644 src/routes/modifierRoute/updateSpecies.js create mode 100644 test_monkey_insert.json create mode 100644 test_species_insert.json diff --git a/db/database.db b/db/database.db index bbb338d5fe2411c67c447e74eef5883dce9a017c..4f4f2cb1624566ed9e04c2f0fd6189b080a49089 100644 GIT binary patch delta 281 zcmZo@U~Fh$oFL7}I#I@1n3X{<?IkY*0|PT}EdzffUq5f{W<dpRUals7W_EE&Nyg^N z$<4fljGmJPWlb4<ChPJ^GWtyR;L~LEoZKfXv$>zIoRKArfjewtqYpPvr#d4$gW!bl z#`=_`$&T^?n^#JwG2+mxJbAP1eOb>G9fji53LS;S^i&;%q|Bm{44?dD9fh3CvQ(eV zo8&?SIVu?V&+xC|uh=Z8ki~Ce#LU4U%_zyJtDIPnn4XuI$K;lpo0yZz<Cb4^cvXo) wNl|`5W^!UqYE*u{LQ1NFPi21I<Tdujiu}&`dFlBIL5Z1pY57H|#U<!`0PXlvi2wiq delta 381 zcmZo@U~Fh$oFL68G*QM`ScpL{?IkY*0|PT}B?EsXUq5f<W<dpZUalr#W_EE&NyZk& z$?d#_O!1kMfAX3##pg`c=aYm`qLbtJM3~|;Hy86wW@PbY;P&0v=*-R0X~4+NAUGj& zbDZ=pMtu4vPnK1lyhZk*LVRY5jzV#2g^ogEda8~>Qf5&}Mtn|wvW`MdW?5={&gM;W zA%ar(8Th~Qzv92oKaIbezk$D$KZ`$}KZM_t-)^&@f*gN6Cl3b$KLZFDa&jY>TnHv7 zg2{nkvLl#m2qr6n$%0@q!<lkS91Nn2l8oZwPKimyOm3-@_u4Bdav~IPGQrhyGQybv D{xwEE diff --git a/index.js b/index.js index dc43e9d..973ac77 100644 --- a/index.js +++ b/index.js @@ -7,7 +7,18 @@ import monkey from './src/models/Monkey.js'; import species from './src/models/Species.js'; import express from 'express'; import helloRoute from './src/routes/helloRoute.js'; - +import monkeyDeletteAll from './src/routes/deleteRoutes/monkeyDeleteAll.js'; +import monkeyDeleteById from './src/routes/deleteRoutes/monkeyDeleteById.js'; +import speciesDeleteAll from './src/routes/deleteRoutes/speciesDeleteAll.js'; +import speciesDeleteById from './src/routes/deleteRoutes/speciesDeleteById.js'; +import monkeyFindAll from './src/routes/findRoutes/monkeyFindAll.js'; +import monkeyFindById from './src/routes/findRoutes/monkeyFindById.js'; +import speciesFindAll from './src/routes/findRoutes/speciesFindAll.js'; +import speciesFindById from './src/routes/findRoutes/speciesFindById.js'; +import monkeyInsert from './src/routes/modifierRoute/insertMonkey.js'; +import speciesInsert from './src/routes/modifierRoute/insertSpecies.js'; +import monkeyUpdate from './src/routes/modifierRoute/updateMonkey.js'; +import speciesUpdate from './src/routes/modifierRoute/updateSpecies.js'; async function createDb() { if(fs.existsSync('./db/database.db') == false){ const db = await open({ @@ -29,7 +40,7 @@ async function openDb() { } async function main() { - //createDb(); + //await createDb(); var db = await openDb(); var DbFactory = new DAODbFactory(db); DbFactory.createMonkeyDAO(); @@ -53,10 +64,12 @@ async function main() { // console.log("ALL MONKEYS 3"); // console.log(allMonkeys); // DbFactory.MonkeyDbDAO.deleteAll(); - await DbFactory.MonkeyDbDAO.insert(new monkey('test',1)); const allMonkeys=await DbFactory.MonkeyDbDAO.findAll(); - console.log("ALL MONKEYS 4"); + const allSpecies=await DbFactory.SpeciesDbDAO.findAll(); + console.log("ALL MONKEYS"); console.log(allMonkeys); + console.log("ALL SPECIES"); + console.log(allSpecies); } const api=express(); @@ -64,6 +77,19 @@ const port=3001; api.use(express.json()); api.use('/hello',helloRoute); +api.use('/monkey/deleteAll',monkeyDeletteAll); +api.use('/monkey/deleteById',monkeyDeleteById); +api.use('/species/deleteAll',speciesDeleteAll); +api.use('/species/deleteById',speciesDeleteById); +api.use('/monkey/findAll',monkeyFindAll); +api.use('/species/findAll',speciesFindAll); +api.use('/monkey/findById',monkeyFindById); +api.use('/species/findById',speciesFindById); +api.use('/monkey/insert',monkeyInsert); +api.use('/species/insert',speciesInsert); +api.use('/monkey/update',monkeyUpdate); +api.use('/species/update',speciesUpdate); + api.listen(port, () => { console.log(`Server is running on port ${port}`); }); diff --git a/migrations/001-db.sql b/migrations/001-db.sql index 7c403e9..564dff7 100644 --- a/migrations/001-db.sql +++ b/migrations/001-db.sql @@ -13,22 +13,21 @@ CREATE TABLE species ( CREATE TABLE monkey ( id INTEGER PRIMARY KEY, name VARCHAR(50) NOT NULL, - species_id INT, + speciesId INT, sex VARCHAR(10), age INT, - birth_loc VARCHAR(50), - live_loc VARCHAR(50), - FOREIGN KEY (species_id) REFERENCES species(id) + birthLoc VARCHAR(50), + liveLoc VARCHAR(50), + FOREIGN KEY (speciesId) REFERENCES species(id) ); - -- Insertion des données dans la table 'species' INSERT INTO species (id, name, habitat, height, weight, diet) VALUES (1, 'Chimpanzee', 'Tropical Rainforest', 1.7, 70, 'Omnivore'), (2, 'Baboon', 'Savanna', 1.1, 40, 'Omnivore'); -- Insertion des données dans la table 'monkey' -INSERT INTO monkey (id, name, species_id, sex, age, birth_loc, live_loc) VALUES +INSERT INTO monkey (id, name, speciesId, sex, age, birthLoc, liveLoc) VALUES (1, 'Champ', 1, 'Male', 15, 'Congo Rainforest', 'Congo Rainforest'), (2, 'Babs', 2, 'Female', 20, 'Kenya', 'Kenya'); diff --git a/src/DAO/MonkeyDbDAO.js b/src/DAO/MonkeyDbDAO.js index 29a7624..9b5d1e7 100644 --- a/src/DAO/MonkeyDbDAO.js +++ b/src/DAO/MonkeyDbDAO.js @@ -1,5 +1,6 @@ import IMonkeyDAO from "../interfaces/IMonkeyDAO.js"; - +import { open } from 'sqlite'; +import sqlite3 from 'sqlite3'; class MonkeyDbDAO extends IMonkeyDAO{ constructor(db){ super(); @@ -7,27 +8,51 @@ class MonkeyDbDAO extends IMonkeyDAO{ } async insert(monkey){ - await this.db.run('INSERT INTO monkey (name, species_id) VALUES (?,?)', [monkey.getName(), monkey.getSpeciesId()]); + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); + await this.db.run('INSERT INTO monkey (name, speciesId, sex, age, birthLoc, liveLoc) VALUES (?,?,?,?,?,?)', [monkey.name, monkey.speciesId, monkey.sex, monkey.age, monkey.birthLoc, monkey.liveLoc]); } async update(monkey){ - await this.db.run('UPDATE monkey SET name = ?, species_id = ? WHERE id = ?', [monkey.getName(), monkey.getSpeciesId(), monkey.getId()]); + console.log(monkey) + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); + await this.db.run('UPDATE monkey SET name = ?, speciesId = ?, sex=?, age = ?, birthLoc = ?, liveLoc = ? WHERE id = ?',[monkey.name, monkey.speciesId, monkey.sex, monkey.age, monkey.birthLoc, monkey.liveLoc, monkey.id]); } - - async delete(monkey){ - await this.db.run('DELETE FROM monkey WHERE id = ?', [monkey.getId()]); + async delete(id){ + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); + await this.db.run('DELETE FROM monkey WHERE id = ?', [id]); } async deleteAll(){ + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); await this.db.run('DELETE FROM monkey'); } async findAll(){ + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); const monkeys = await this.db.all('SELECT * FROM monkey'); return monkeys; } async findById(id){ + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); const monkey = await this.db.get('SELECT * FROM monkey WHERE id = ?', [id]); return monkey; } diff --git a/src/DAO/SpeciesDbDAO.js b/src/DAO/SpeciesDbDAO.js index 89ed611..83db1c0 100644 --- a/src/DAO/SpeciesDbDAO.js +++ b/src/DAO/SpeciesDbDAO.js @@ -1,29 +1,59 @@ import ISpeciesDAO from "../interfaces/ISpeciesDAO.js"; - +import { open } from 'sqlite'; +import sqlite3 from 'sqlite3'; class SpeciesDbDAO extends ISpeciesDAO{ constructor(db){ super(); this.db=db } async insert(species){ - + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); + await this.db.run('INSERT INTO species (name, habitat, height, weight, diet) VALUES (?, ?, ?, ?, ?)', [species.name, species.habitat, species.height, species.weight, species.diet]); } async update(species){ - + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); + await this.db.run('UPDATE species SET name = ?, habitat = ?, height = ?, weight = ?, diet = ? WHERE id = ?', [species.name, species.habitat, species.height, species.weight, species.diet, species.id]); } - async delete(species){ - + async delete(id){ + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); + await this.db.run('DELETE FROM species WHERE id = ?', [id]); } async findAll(){ + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); const species = await this.db.all('SELECT * FROM species'); return species; } - async findById(id){ + async deleteAll(){ + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); + await this.db.run('DELETE FROM species'); + } + async findById(id){ + this.db = await open({ + filename: './db/database.db', + driver: sqlite3.Database + }); + const species = await this.db.get('SELECT * FROM species WHERE id = ?', [id]); + return species; } } diff --git a/src/interfaces/IMonkeyDAO.js b/src/interfaces/IMonkeyDAO.js index 4ab069b..8674738 100644 --- a/src/interfaces/IMonkeyDAO.js +++ b/src/interfaces/IMonkeyDAO.js @@ -18,6 +18,10 @@ export default class IMonkeyDbDAO { throw new Error('You have to implement the method delete!'); } + deleteAll() { + throw new Error('You have to implement the method deleteAll!'); + } + findAll() { throw new Error('You have to implement the method findAll!'); } diff --git a/src/interfaces/ISpeciesDAO.js b/src/interfaces/ISpeciesDAO.js index 121ab4f..e183c93 100644 --- a/src/interfaces/ISpeciesDAO.js +++ b/src/interfaces/ISpeciesDAO.js @@ -17,6 +17,10 @@ export default class ISpeciesDAO{ throw new Error('Method "delete(id)" must be implemented'); } + async deleteAll(){ + throw new Error('Method "deleteAll" must be implemented'); + } + async findall(){ throw new Error('Method "findall" must be implemented'); } diff --git a/src/routes/deleteRoutes/monkeyDeleteAll.js b/src/routes/deleteRoutes/monkeyDeleteAll.js new file mode 100644 index 0000000..571738f --- /dev/null +++ b/src/routes/deleteRoutes/monkeyDeleteAll.js @@ -0,0 +1,15 @@ +import express from 'express'; +import MonkeyDbDAO from '../../DAO/MonkeyDbDAO.js'; +const router = express.Router(); + +router.delete('/', async (req, res) => { + try{ + var monkeyDbDAO = new MonkeyDbDAO(); + await monkeyDbDAO.deleteAll(); + res.send('All species deleted'); + }catch(error){ + res.send(error.message); + } +}); + +export default router; diff --git a/src/routes/deleteRoutes/monkeyDeleteById.js b/src/routes/deleteRoutes/monkeyDeleteById.js new file mode 100644 index 0000000..16ec41c --- /dev/null +++ b/src/routes/deleteRoutes/monkeyDeleteById.js @@ -0,0 +1,18 @@ +import express from 'express'; +import MonkeyDbDAO from '../../DAO/MonkeyDbDAO.js'; +const router = express.Router(); + +router.delete('/:id', async (req, res) => { + try{ + const id = req.params.id; + console.log(id); + var monkeyDbDAO = new MonkeyDbDAO(); + await monkeyDbDAO.delete(id); + res.send('Monkey deleted'); + }catch(error){ + res.send(error.message); + } +}); + + +export default router; \ No newline at end of file diff --git a/src/routes/deleteRoutes/speciesDeleteAll.js b/src/routes/deleteRoutes/speciesDeleteAll.js new file mode 100644 index 0000000..4a3309b --- /dev/null +++ b/src/routes/deleteRoutes/speciesDeleteAll.js @@ -0,0 +1,15 @@ +import express from 'express'; +import SpeciesDbDAO from '../../DAO/SpeciesDbDAO.js'; +const router = express.Router(); + +router.delete('/', (req, res) => { + try{ + var speciesDbDAO = new SpeciesDbDAO(); + speciesDbDAO.deleteAll(); + res.send('All species deleted'); + }catch(error){ + res.send(error.message); + } +}); + +export default router; diff --git a/src/routes/deleteRoutes/speciesDeleteById.js b/src/routes/deleteRoutes/speciesDeleteById.js new file mode 100644 index 0000000..5d294b1 --- /dev/null +++ b/src/routes/deleteRoutes/speciesDeleteById.js @@ -0,0 +1,17 @@ +import express from 'express'; +import SpeciesDbDAO from '../../DAO/SpeciesDbDAO.js'; +const router = express.Router(); + +router.delete('/:id', async (req, res) => { + try{ + const id = req.params.id; + console.log(id); + var speciesDbDAO = new SpeciesDbDAO(); + await speciesDbDAO.delete(id); + res.send('species deleted'); + }catch(error){ + res.send(error.message); + } + }); + +export default router; \ No newline at end of file diff --git a/src/routes/findRoutes/monkeyFindAll.js b/src/routes/findRoutes/monkeyFindAll.js new file mode 100644 index 0000000..5a27556 --- /dev/null +++ b/src/routes/findRoutes/monkeyFindAll.js @@ -0,0 +1,16 @@ +import express from 'express'; +import MonkeyDbDAO from '../../DAO/MonkeyDbDAO.js'; +const router = express.Router(); + +router.get('/', async (req, res) => { + try{ + var monkeyDbDAO = new MonkeyDbDAO(); + const result = await monkeyDbDAO.findAll(); + console.log("test"); + res.send(result); + }catch(error){ + res.send(error.message+"quoicoubeh"); + } +}); + +export default router; \ No newline at end of file diff --git a/src/routes/findRoutes/monkeyFindById.js b/src/routes/findRoutes/monkeyFindById.js new file mode 100644 index 0000000..6cb3479 --- /dev/null +++ b/src/routes/findRoutes/monkeyFindById.js @@ -0,0 +1,17 @@ +import express from 'express'; +import MonkeyDbDAO from '../../DAO/MonkeyDbDAO.js'; +const router = express.Router(); + +router.get('/:id', async (req, res) => { + try{ + const id = req.params.id; + console.log(id); + var monkeyDbDAO = new MonkeyDbDAO(); + const result=await monkeyDbDAO.findById(id); + res.send(result); + }catch(error){ + res.send(error.message); + } +}); + +export default router; \ No newline at end of file diff --git a/src/routes/findRoutes/speciesFindAll.js b/src/routes/findRoutes/speciesFindAll.js new file mode 100644 index 0000000..16c83d2 --- /dev/null +++ b/src/routes/findRoutes/speciesFindAll.js @@ -0,0 +1,15 @@ +import express from 'express'; +import SpeciesDbDAO from '../../DAO/SpeciesDbDAO.js'; +const router = express.Router(); + +router.get('/', async (req, res) => { + try{ + var speciesDbDAO = new SpeciesDbDAO(); + const result=await speciesDbDAO.findAll(); + res.send(result); + }catch(error){ + res.send(error.message); + } +}); + +export default router; \ No newline at end of file diff --git a/src/routes/findRoutes/speciesFindById.js b/src/routes/findRoutes/speciesFindById.js new file mode 100644 index 0000000..b4f02f4 --- /dev/null +++ b/src/routes/findRoutes/speciesFindById.js @@ -0,0 +1,17 @@ +import express from 'express'; +import SpeciesDbDAO from '../../DAO/SpeciesDbDAO.js'; +const router = express.Router(); + +router.get('/:id', async (req, res) => { + try{ + const id = req.params.id; + console.log(id); + var speciesDbDAO = new SpeciesDbDAO(); + const result=await speciesDbDAO.findById(id); + res.send(result); + }catch(error){ + res.send(error.message); + } +}); + +export default router; \ No newline at end of file diff --git a/src/routes/modifierRoute/insertMonkey.js b/src/routes/modifierRoute/insertMonkey.js new file mode 100644 index 0000000..e4c40ce --- /dev/null +++ b/src/routes/modifierRoute/insertMonkey.js @@ -0,0 +1,17 @@ +import express from 'express'; +import MonkeyDbDAO from '../../DAO/MonkeyDbDAO.js'; +const router = express.Router(); + +router.post('/', async (req, res) => { + try{ + const monkey = req.body; + console.log(monkey); + var monkeyDbDAO = new MonkeyDbDAO(); + await monkeyDbDAO.insert(monkey); + res.send('Monkey inserted'); + }catch(error){ + res.send(error.message); + } +}); + +export default router; \ No newline at end of file diff --git a/src/routes/modifierRoute/insertSpecies.js b/src/routes/modifierRoute/insertSpecies.js new file mode 100644 index 0000000..5afede7 --- /dev/null +++ b/src/routes/modifierRoute/insertSpecies.js @@ -0,0 +1,17 @@ +import express from 'express'; +import SpeciesDbDAO from '../../DAO/SpeciesDbDAO.js'; +const router = express.Router(); + +router.post('/', async (req, res) => { + try{ + console.log("test8") + const species = req.body; + var speciesDbDAO = new SpeciesDbDAO(); + await speciesDbDAO.insert(species); + res.send('Species inserted'); + }catch(error){ + res.send(error.message); + } +}); + +export default router; \ No newline at end of file diff --git a/src/routes/modifierRoute/updateMonkey.js b/src/routes/modifierRoute/updateMonkey.js new file mode 100644 index 0000000..4acc08e --- /dev/null +++ b/src/routes/modifierRoute/updateMonkey.js @@ -0,0 +1,17 @@ +import express from 'express'; +import MonkeyDbDAO from '../../DAO/MonkeyDbDAO.js'; +const router = express.Router(); + +router.put('/', async (req, res) => { + try{ + const monkey = req.body; + console.log(monkey); + var monkeyDbDAO = new MonkeyDbDAO(); + await monkeyDbDAO.update(monkey); + res.send('Monkey updated'); + }catch(error){ + res.send(error.message); + } +}); + +export default router; diff --git a/src/routes/modifierRoute/updateSpecies.js b/src/routes/modifierRoute/updateSpecies.js new file mode 100644 index 0000000..c238862 --- /dev/null +++ b/src/routes/modifierRoute/updateSpecies.js @@ -0,0 +1,16 @@ +import express from 'express'; +import SpeciesDbDAO from '../../DAO/SpeciesDbDAO.js'; +const router = express.Router(); + +router.put('/', async (req, res) => { + try{ + const species = req.body; + var speciesDbDAO = new SpeciesDbDAO(); + await speciesDbDAO.update(species); + res.send('Species updated'); + }catch(error){ + res.send(error.message); + } +}); + +export default router; \ No newline at end of file diff --git a/test_monkey_insert.json b/test_monkey_insert.json new file mode 100644 index 0000000..f27b501 --- /dev/null +++ b/test_monkey_insert.json @@ -0,0 +1,47 @@ +[ + { + "id": 1, + "name": "George", + "species_id": 1, + "sex": "Male", + "age": 15, + "birth_loc": "Forêt tropicale", + "live_loc": "Zoo de Paris" + }, + { + "id": 2, + "name": "Lucy", + "species_id": 2, + "sex": "Female", + "age": 12, + "birth_loc": "Forêt tropicale", + "live_loc": "Zoo de Lyon" + }, + { + "id": 3, + "name": "Fred", + "species_id": 3, + "sex": "Male", + "age": 20, + "birth_loc": "Forêt tropicale", + "live_loc": "Zoo de Marseille" + }, + { + "id": 4, + "name": "Bella", + "species_id": 4, + "sex": "Female", + "age": 10, + "birth_loc": "Savane", + "live_loc": "Zoo de Lille" + }, + { + "id": 5, + "name": "Max", + "species_id": 5, + "sex": "Male", + "age": 8, + "birth_loc": "Forêt tropicale", + "live_loc": "Zoo de Strasbourg" + } +] diff --git a/test_species_insert.json b/test_species_insert.json new file mode 100644 index 0000000..cad0cb4 --- /dev/null +++ b/test_species_insert.json @@ -0,0 +1,42 @@ +[ + { + "id": 1, + "name": "Gorille", + "habitat": "Forêt tropicale", + "height": 1.7, + "weight": 200.0, + "diet": "Omnivore" + }, + { + "id": 2, + "name": "Chimpanzé", + "habitat": "Forêt tropicale", + "height": 1.2, + "weight": 60.0, + "diet": "Omnivore" + }, + { + "id": 3, + "name": "Orang-outan", + "habitat": "Forêt tropicale", + "height": 1.4, + "weight": 90.0, + "diet": "Frugivore" + }, + { + "id": 4, + "name": "Babouin", + "habitat": "Savane", + "height": 0.9, + "weight": 30.0, + "diet": "Omnivore" + }, + { + "id": 5, + "name": "Capucin", + "habitat": "Forêt tropicale", + "height": 0.5, + "weight": 3.9, + "diet": "Omnivore" + } +] \ No newline at end of file -- GitLab