From 7c3f6d05267c43b1cf06564e0cd4f104be9ced88 Mon Sep 17 00:00:00 2001
From: ALGLAVE Ivan <ivan.alglave8@etu.univ-lorraine.fr>
Date: Tue, 7 Mar 2023 11:01:52 +0100
Subject: [PATCH] retrieve multiple people from an id array with a single call

---
 src/people/dao/people.dao.ts    |  9 +++++++++
 src/people/people.controller.ts | 15 +++++++++++++++
 src/people/people.service.ts    |  3 +++
 3 files changed, 27 insertions(+)

diff --git a/src/people/dao/people.dao.ts b/src/people/dao/people.dao.ts
index bb03a1d..b12089f 100644
--- a/src/people/dao/people.dao.ts
+++ b/src/people/dao/people.dao.ts
@@ -54,6 +54,15 @@ export class PeopleDao {
       });
     });
 
+  findManyById = (idList: string[]): Promise<People[]> =>
+    new Promise((resolve, reject) => {
+      this._peopleModel.find({ _id: { $in: idList } }, {}, {}, (err, value) => {
+        if (err) reject(err.message);
+        if (!value) resolve([]);
+        resolve(value);
+      });
+    });
+
   findById = (id: string): Promise<People | void> =>
     new Promise((resolve, reject) => {
       this._peopleModel.findById(id, (err, value) => {
diff --git a/src/people/people.controller.ts b/src/people/people.controller.ts
index f887a78..31c2931 100644
--- a/src/people/people.controller.ts
+++ b/src/people/people.controller.ts
@@ -24,9 +24,24 @@ export class PeopleController {
   //@UseGuards(AuthGuard('jwt'))
   @Get()
   findAll(): Promise<PeopleEntity[] | void> {
+    console.log(
+      encodeURIComponent(
+        JSON.stringify([
+          '640703a32ece22f629e3435f',
+          '640705340ca60d0b09ba2b88',
+          '640706a80ca60d0b09ba2cd2',
+        ]),
+      ),
+    );
     return this._peopleService.findAll();
   }
 
+  @Get('/many/:list')
+  findMany(@Param() params: { list: string }): Promise<PeopleEntity[] | void> {
+    const idList = JSON.parse(params.list);
+    return this._peopleService.findMany(idList);
+  }
+
   @UseGuards(AuthGuard('jwt'))
   @Get(':id')
   findOne(@Param() params: { id: string }): Promise<PeopleEntity | void> {
diff --git a/src/people/people.service.ts b/src/people/people.service.ts
index 3f03971..36fc9bd 100644
--- a/src/people/people.service.ts
+++ b/src/people/people.service.ts
@@ -13,6 +13,9 @@ export class PeopleService {
 
   findAll = (): Promise<PeopleEntity[] | void> => this._peopleDao.find();
 
+  findMany = (idList: string[]): Promise<PeopleEntity[] | void> =>
+    this._peopleDao.findManyById(idList);
+
   findOne = (id: string): Promise<PeopleEntity | void> =>
     this._peopleDao.findById(id);
 
-- 
GitLab