diff --git a/ExpressAPI/src/managers/UserManager.ts b/ExpressAPI/src/managers/UserManager.ts index 871ea380c53163bc518f752c0373d97a02ef6374..d4820af48ed073f3cf5d4013b3de1e08f18a4ce9 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 1dffaef8a782bb06c01e485705afc830e563f441..c3355a6d47215f7c236888d5cb9d10c799e72675 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 59a5e0056b7d85185e11d49a66d82153cab01192..0c90584540c7e56c6ae4e0db55008d0c89dc9f74 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 } } }