From f6c5e0f0c418645ce7bc46c7c277c53e8ebff44d Mon Sep 17 00:00:00 2001 From: Filip Borum Poulsen Date: Tue, 18 Apr 2023 16:56:13 +0200 Subject: [PATCH] Added center filter to trainer endpoint --- server/src/routes/trainer.ts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/server/src/routes/trainer.ts b/server/src/routes/trainer.ts index 3659b12..c795219 100644 --- a/server/src/routes/trainer.ts +++ b/server/src/routes/trainer.ts @@ -6,16 +6,38 @@ import { DatabaseError } from "pg"; import Trainer from "../interfaces/trainer"; import { AdminAuth } from "../middlewares/auth"; import { trainerExists } from "../middlewares/trainer"; +import { idSchema } from "../schemas"; const router: Router = express.Router(); +const trainerFiltersSchema = Joi.object({ + center: Joi.array().single().items( + idSchema.required() + ) +}); + +interface TrainerFilters { + center?: number[] +} + router.get("/trainer", async (req: Request, res: Response) => { try { + const validation = trainerFiltersSchema.validate(req.query, { abortEarly: false, stripUnknown: true }); + if (validation.error !== undefined) { + return res.status(400).send(validation.error.details); + } + + const trainerFilters: TrainerFilters = validation.value; + const databaseResult = await client.query(` SELECT trainers.id, first_name, last_name, center_id, centers.name as center_name FROM trainers JOIN users ON trainers.user_id = users.id - JOIN centers on trainers.center_id = centers.id; - `); + JOIN centers on trainers.center_id = centers.id + WHERE trainers.id = ANY($1) OR $2; + `,[ + trainerFilters.center !== undefined ? trainerFilters.center : [], + trainerFilters.center === undefined + ]); const trainers: Trainer[] = databaseResult.rows;