From 2e15db72552a32b66253acc80c023e6fd9203e91 Mon Sep 17 00:00:00 2001 From: Keane Chan Date: Sat, 5 Nov 2022 10:58:20 +0800 Subject: [PATCH] [resumes][feat] fetch location on resumes page --- apps/portal/src/pages/resumes/[resumeId].tsx | 6 +-- .../router/resumes/resumes-resume-router.ts | 26 +++++++++---- .../resumes/resumes-resume-user-router.ts | 39 ++++++++++++------- 3 files changed, 45 insertions(+), 26 deletions(-) diff --git a/apps/portal/src/pages/resumes/[resumeId].tsx b/apps/portal/src/pages/resumes/[resumeId].tsx index 8fc6b696..ee203356 100644 --- a/apps/portal/src/pages/resumes/[resumeId].tsx +++ b/apps/portal/src/pages/resumes/[resumeId].tsx @@ -200,7 +200,7 @@ export default function ResumeReviewPage() { initFormDetails={{ additionalInfo: detailsQuery.data.additionalInfo ?? '', experience: detailsQuery.data.experience, - location: detailsQuery.data.location, + location: detailsQuery.data.locationId, resumeId: resumeId as string, role: detailsQuery.data.role, title: detailsQuery.data.title, @@ -334,10 +334,10 @@ export default function ResumeReviewPage() { type="button" onClick={() => onInfoTagClick({ - locationLabel: detailsQuery.data?.location, + locationLabel: detailsQuery.data?.locationId, }) }> - {getFilterLabel('location', detailsQuery.data.location)} + {detailsQuery.data?.location.name}
diff --git a/apps/portal/src/server/router/resumes/resumes-resume-router.ts b/apps/portal/src/server/router/resumes/resumes-resume-router.ts index ec4a36b4..2842b6cc 100644 --- a/apps/portal/src/server/router/resumes/resumes-resume-router.ts +++ b/apps/portal/src/server/router/resumes/resumes-resume-router.ts @@ -35,7 +35,7 @@ export const resumesRouter = createRouter() where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, title: { contains: searchValue, mode: 'insensitive' }, }, @@ -49,6 +49,11 @@ export const resumesRouter = createRouter() }, }, comments: true, + location: { + select: { + name: true, + }, + }, stars: { where: { OR: { @@ -79,7 +84,7 @@ export const resumesRouter = createRouter() where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, title: { contains: searchValue, mode: 'insensitive' }, }, @@ -92,7 +97,7 @@ export const resumesRouter = createRouter() id: r.id, isResolved: r.isResolved, isStarredByUser: r.stars.length > 0, - location: r.location, + location: r.location.name, numComments: r._count.comments, numStars: r._count.stars, role: r.role, @@ -103,7 +108,7 @@ export const resumesRouter = createRouter() return resume; }); - // Group by role and count, taking into account all role/experience/location/isUnreviewed filters and search value + // Group by role and count, taking into account all role/experience/locationId/isUnreviewed filters and search value const roleCounts = await ctx.prisma.resumesResume.groupBy({ _count: { _all: true, @@ -112,7 +117,7 @@ export const resumesRouter = createRouter() where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, title: { contains: searchValue, mode: 'insensitive' }, }, }); @@ -143,7 +148,7 @@ export const resumesRouter = createRouter() by: ['experience'], where: { isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, title: { contains: searchValue, mode: 'insensitive' }, }, @@ -165,7 +170,7 @@ export const resumesRouter = createRouter() _count: { _all: true, }, - by: ['location'], + by: ['locationId'], where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, @@ -174,7 +179,7 @@ export const resumesRouter = createRouter() }, }); const mappedLocationCounts = Object.fromEntries( - locationCounts.map((lc) => [lc.location, lc._count._all]), + locationCounts.map((lc) => [lc.locationId, lc._count._all]), ); const zeroLocationCounts = Object.fromEntries( LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [ @@ -217,6 +222,11 @@ export const resumesRouter = createRouter() stars: true, }, }, + location: { + select: { + name: true, + }, + }, stars: { where: { OR: { diff --git a/apps/portal/src/server/router/resumes/resumes-resume-user-router.ts b/apps/portal/src/server/router/resumes/resumes-resume-user-router.ts index 040c8fc7..62016e55 100644 --- a/apps/portal/src/server/router/resumes/resumes-resume-user-router.ts +++ b/apps/portal/src/server/router/resumes/resumes-resume-user-router.ts @@ -8,7 +8,6 @@ import type { Resume } from '~/types/resume'; export const resumesResumeUserRouter = createProtectedRouter() .mutation('upsert', { - // TODO: Use enums for experience, location, role input: z.object({ additionalInfo: z.string().optional(), experience: z.string(), @@ -91,7 +90,7 @@ export const resumesResumeUserRouter = createProtectedRouter() resume: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, title: { contains: searchValue, mode: 'insensitive' }, }, @@ -108,6 +107,11 @@ export const resumesResumeUserRouter = createProtectedRouter() stars: true, }, }, + location: { + select: { + name: true, + }, + }, user: { select: { name: true, @@ -144,7 +148,7 @@ export const resumesResumeUserRouter = createProtectedRouter() resume: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, title: { contains: searchValue, mode: 'insensitive' }, }, @@ -160,7 +164,7 @@ export const resumesResumeUserRouter = createProtectedRouter() id: rs.resume.id, isResolved: rs.resume.isResolved, isStarredByUser: true, - location: rs.resume.location, + location: rs.resume.location.name, numComments: rs.resume._count.comments, numStars: rs.resume._count.stars, role: rs.resume.role, @@ -179,7 +183,7 @@ export const resumesResumeUserRouter = createProtectedRouter() where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, stars: { some: { userId, @@ -209,7 +213,7 @@ export const resumesResumeUserRouter = createProtectedRouter() by: ['experience'], where: { isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, stars: { some: { @@ -236,7 +240,7 @@ export const resumesResumeUserRouter = createProtectedRouter() _count: { _all: true, }, - by: ['location'], + by: ['locationId'], where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, @@ -250,7 +254,7 @@ export const resumesResumeUserRouter = createProtectedRouter() }, }); const mappedLocationCounts = Object.fromEntries( - locationCounts.map((lc) => [lc.location, lc._count._all]), + locationCounts.map((lc) => [lc.locationId, lc._count._all]), ); const zeroLocationCounts = Object.fromEntries( LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [ @@ -299,7 +303,7 @@ export const resumesResumeUserRouter = createProtectedRouter() where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, title: { contains: searchValue, mode: 'insensitive' }, userId, @@ -313,6 +317,11 @@ export const resumesResumeUserRouter = createProtectedRouter() stars: true, }, }, + location: { + select: { + name: true, + }, + }, stars: { where: { userId, @@ -341,7 +350,7 @@ export const resumesResumeUserRouter = createProtectedRouter() where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, title: { contains: searchValue, mode: 'insensitive' }, userId, @@ -355,7 +364,7 @@ export const resumesResumeUserRouter = createProtectedRouter() id: r.id, isResolved: r.isResolved, isStarredByUser: r.stars.length > 0, - location: r.location, + location: r.location.name, numComments: r._count.comments, numStars: r._count.stars, role: r.role, @@ -374,7 +383,7 @@ export const resumesResumeUserRouter = createProtectedRouter() where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, title: { contains: searchValue, mode: 'insensitive' }, userId, }, @@ -400,7 +409,7 @@ export const resumesResumeUserRouter = createProtectedRouter() by: ['experience'], where: { isResolved: isUnreviewed ? false : {}, - location: { in: locationFilters }, + locationId: { in: locationFilters }, role: { in: roleFilters }, title: { contains: searchValue, mode: 'insensitive' }, userId, @@ -423,7 +432,7 @@ export const resumesResumeUserRouter = createProtectedRouter() _count: { _all: true, }, - by: ['location'], + by: ['locationId'], where: { experience: { in: experienceFilters }, isResolved: isUnreviewed ? false : {}, @@ -433,7 +442,7 @@ export const resumesResumeUserRouter = createProtectedRouter() }, }); const mappedLocationCounts = Object.fromEntries( - locationCounts.map((lc) => [lc.location, lc._count._all]), + locationCounts.map((lc) => [lc.locationId, lc._count._all]), ); const zeroLocationCounts = Object.fromEntries( LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [