From 0c94879d01cfc6536cd574308572d9fdad7ee6aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.swiss> Date: Tue, 25 Mar 2025 14:17:40 +0100 Subject: [PATCH] ParamsCallbackManager => Add userId --- ExpressAPI/src/managers/UserManager.ts | 11 ++++++++-- .../src/middlewares/ParamsCallbackManager.ts | 22 ++++++++++++++++++- ExpressAPI/src/types/express/index.d.ts | 8 +++---- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/ExpressAPI/src/managers/UserManager.ts b/ExpressAPI/src/managers/UserManager.ts index 871ea38..d4820af 100644 --- a/ExpressAPI/src/managers/UserManager.ts +++ b/ExpressAPI/src/managers/UserManager.ts @@ -5,6 +5,13 @@ import * as Gitlab from '@gitbeaker/rest'; class UserManager { + async getFiltered(filters: Prisma.UserWhereInput | undefined, include: Prisma.UserInclude | undefined = undefined): Promise<Array<User> | undefined> { + return await db.user.findMany({ + where : filters, + include: include + }) as unknown as Array<User> ?? undefined; + } + async getByMail(mail: string, include: Prisma.UserInclude | undefined = undefined): Promise<User | undefined> { return await db.user.findUnique({ where : { @@ -14,10 +21,10 @@ class UserManager { }) as unknown as User ?? undefined; } - async getById(id: number, include: Prisma.UserInclude | undefined = undefined): Promise<User | undefined> { + async getById(id: string | number, include: Prisma.UserInclude | undefined = undefined): Promise<User | undefined> { return await db.user.findUnique({ where : { - id: id + id: Number(id) }, include: include }) as unknown as User ?? undefined; diff --git a/ExpressAPI/src/middlewares/ParamsCallbackManager.ts b/ExpressAPI/src/middlewares/ParamsCallbackManager.ts index 1dffaef..c3355a6 100644 --- a/ExpressAPI/src/middlewares/ParamsCallbackManager.ts +++ b/ExpressAPI/src/middlewares/ParamsCallbackManager.ts @@ -5,6 +5,7 @@ import ExerciseManager from '../managers/ExerciseManager'; import AssignmentManager from '../managers/AssignmentManager'; import TagManager from '../managers/TagManager'; import TagProposalManager from '../managers/TagProposalManager'; +import UserManager from '../managers/UserManager'; type GetFunction = (id: string | number, ...args: Array<unknown>) => Promise<unknown> @@ -29,6 +30,7 @@ class ParamsCallbackManager { initBoundParams(req: express.Request) { if ( !req.boundParams ) { req.boundParams = { + user : undefined, assignment : undefined, exercise : undefined, tag : undefined, @@ -38,13 +40,31 @@ class ParamsCallbackManager { } registerOnBackend(backend: Express) { + this.listenParam('userId', backend, (UserManager.getById as GetFunction).bind(UserManager), [ { + assignments: true, + exercises : { + include: { + members : true, + assignment: { + include: { + staff: true + } + } + } + } + } ], 'user'); + this.listenParam('assignmentNameOrUrl', backend, (AssignmentManager.get as GetFunction).bind(AssignmentManager), [ { exercises: true, staff : true } ], 'assignment'); this.listenParam('exerciseIdOrUrl', backend, (ExerciseManager.get as GetFunction).bind(ExerciseManager), [ { - assignment: true, + assignment: { + include: { + staff: true + } + }, members : true, results : true } ], 'exercise'); diff --git a/ExpressAPI/src/types/express/index.d.ts b/ExpressAPI/src/types/express/index.d.ts index 59a5e00..0c90584 100644 --- a/ExpressAPI/src/types/express/index.d.ts +++ b/ExpressAPI/src/types/express/index.d.ts @@ -1,6 +1,6 @@ -import Session from '../../controllers/Session.js'; -import { Assignment, Exercise, Tag } from '../DatabaseTypes'; -import { TagProposal } from '@prisma/client'; +import Session from '../../controllers/Session.js'; +import { Assignment, Exercise, Tag, User } from '../DatabaseTypes'; +import { TagProposal } from '@prisma/client'; // to make the file a module and avoid the TypeScript error export {}; @@ -10,7 +10,7 @@ declare global { export interface Request { session: Session, boundParams: { - assignment: Assignment | undefined, exercise: Exercise | undefined, tag: Tag | undefined, tagProposal: TagProposal | undefined + user: User | undefined, assignment: Assignment | undefined, exercise: Exercise | undefined, tag: Tag | undefined, tagProposal: TagProposal | undefined } } } -- GitLab