From 981f3e9c940fa6182c46d3d6babc2cddb25e591b Mon Sep 17 00:00:00 2001 From: Rickson Yang Date: Thu, 17 Mar 2022 22:09:41 -0400 Subject: [PATCH] Denormalize signup res and query types --- backend/graphql/types/shiftSignupType.ts | 2 ++ .../implementations/shiftSignupService.ts | 22 +++++++++++++++++-- backend/types.ts | 5 ++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/backend/graphql/types/shiftSignupType.ts b/backend/graphql/types/shiftSignupType.ts index fec3bed0..8264fcca 100644 --- a/backend/graphql/types/shiftSignupType.ts +++ b/backend/graphql/types/shiftSignupType.ts @@ -22,6 +22,8 @@ const shiftSignupType = gql` type ShiftSignupResponseDTO { shiftId: ID! + shiftStartTime: DateTime! + shiftEndTime: DateTime! userId: ID! numVolunteers: Int! note: String! diff --git a/backend/services/implementations/shiftSignupService.ts b/backend/services/implementations/shiftSignupService.ts index acb8f717..3207d4bc 100644 --- a/backend/services/implementations/shiftSignupService.ts +++ b/backend/services/implementations/shiftSignupService.ts @@ -1,5 +1,5 @@ import { PrismaClient, Signup, SignupStatus } from "@prisma/client"; -import { Prisma } from ".prisma/client"; +import { Prisma, Shift } from ".prisma/client"; import IShiftSignupService from "../interfaces/shiftSignupService"; import { @@ -24,6 +24,19 @@ class ShiftSignupService implements IShiftSignupService { }; }; + convertSignupResponseToDTO = ( + signup: Signup, + shift: Shift, + ): ShiftSignupResponseDTO => { + return { + ...signup, + shiftId: String(signup.shiftId), + userId: String(signup.userId), + shiftStartTime: shift.startTime, + shiftEndTime: shift.endTime, + }; + }; + async getShiftSignupsForUser( userId: string, signupStatus: SignupStatus | null, @@ -43,8 +56,13 @@ class ShiftSignupService implements IShiftSignupService { }; const shiftSignups = await prisma.signup.findMany({ where: filter, + include: { + shift: true, + }, }); - return shiftSignups.map((signup) => this.convertSignupToDTO(signup)); + return shiftSignups.map((signup) => + this.convertSignupResponseToDTO(signup, signup.shift), + ); } catch (error: unknown) { Logger.error( `Failed to shift signups. Reason = ${getErrorMessage(error)}`, diff --git a/backend/types.ts b/backend/types.ts index 257ed9eb..4a6cd355 100644 --- a/backend/types.ts +++ b/backend/types.ts @@ -132,7 +132,10 @@ export type UpdateShiftSignupRequestDTO = Omit< "shiftId" | "userId" >; -export type ShiftSignupResponseDTO = ShiftSignupDTO; +export type ShiftSignupResponseDTO = { + shiftStartTime: Date; + shiftEndTime: Date; +} & ShiftSignupDTO; export type SkillDTO = { id: string;