[resumes][feat] fetch location on resumes page

pull/506/head
Keane Chan 3 years ago
parent 9c87b8801f
commit 2e15db7255
No known key found for this signature in database
GPG Key ID: 32718398E1E9F87C

@ -200,7 +200,7 @@ export default function ResumeReviewPage() {
initFormDetails={{ initFormDetails={{
additionalInfo: detailsQuery.data.additionalInfo ?? '', additionalInfo: detailsQuery.data.additionalInfo ?? '',
experience: detailsQuery.data.experience, experience: detailsQuery.data.experience,
location: detailsQuery.data.location, location: detailsQuery.data.locationId,
resumeId: resumeId as string, resumeId: resumeId as string,
role: detailsQuery.data.role, role: detailsQuery.data.role,
title: detailsQuery.data.title, title: detailsQuery.data.title,
@ -334,10 +334,10 @@ export default function ResumeReviewPage() {
type="button" type="button"
onClick={() => onClick={() =>
onInfoTagClick({ onInfoTagClick({
locationLabel: detailsQuery.data?.location, locationLabel: detailsQuery.data?.locationId,
}) })
}> }>
{getFilterLabel('location', detailsQuery.data.location)} {detailsQuery.data?.location.name}
</button> </button>
</div> </div>
<div className="flex items-center pt-2 text-sm text-slate-600 xl:pt-1"> <div className="flex items-center pt-2 text-sm text-slate-600 xl:pt-1">

@ -35,7 +35,7 @@ export const resumesRouter = createRouter()
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
}, },
@ -49,6 +49,11 @@ export const resumesRouter = createRouter()
}, },
}, },
comments: true, comments: true,
location: {
select: {
name: true,
},
},
stars: { stars: {
where: { where: {
OR: { OR: {
@ -79,7 +84,7 @@ export const resumesRouter = createRouter()
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
}, },
@ -92,7 +97,7 @@ export const resumesRouter = createRouter()
id: r.id, id: r.id,
isResolved: r.isResolved, isResolved: r.isResolved,
isStarredByUser: r.stars.length > 0, isStarredByUser: r.stars.length > 0,
location: r.location, location: r.location.name,
numComments: r._count.comments, numComments: r._count.comments,
numStars: r._count.stars, numStars: r._count.stars,
role: r.role, role: r.role,
@ -103,7 +108,7 @@ export const resumesRouter = createRouter()
return resume; 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({ const roleCounts = await ctx.prisma.resumesResume.groupBy({
_count: { _count: {
_all: true, _all: true,
@ -112,7 +117,7 @@ export const resumesRouter = createRouter()
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
}, },
}); });
@ -143,7 +148,7 @@ export const resumesRouter = createRouter()
by: ['experience'], by: ['experience'],
where: { where: {
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
}, },
@ -165,7 +170,7 @@ export const resumesRouter = createRouter()
_count: { _count: {
_all: true, _all: true,
}, },
by: ['location'], by: ['locationId'],
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
@ -174,7 +179,7 @@ export const resumesRouter = createRouter()
}, },
}); });
const mappedLocationCounts = Object.fromEntries( const mappedLocationCounts = Object.fromEntries(
locationCounts.map((lc) => [lc.location, lc._count._all]), locationCounts.map((lc) => [lc.locationId, lc._count._all]),
); );
const zeroLocationCounts = Object.fromEntries( const zeroLocationCounts = Object.fromEntries(
LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [ LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [
@ -217,6 +222,11 @@ export const resumesRouter = createRouter()
stars: true, stars: true,
}, },
}, },
location: {
select: {
name: true,
},
},
stars: { stars: {
where: { where: {
OR: { OR: {

@ -8,7 +8,6 @@ import type { Resume } from '~/types/resume';
export const resumesResumeUserRouter = createProtectedRouter() export const resumesResumeUserRouter = createProtectedRouter()
.mutation('upsert', { .mutation('upsert', {
// TODO: Use enums for experience, location, role
input: z.object({ input: z.object({
additionalInfo: z.string().optional(), additionalInfo: z.string().optional(),
experience: z.string(), experience: z.string(),
@ -91,7 +90,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
resume: { resume: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
}, },
@ -108,6 +107,11 @@ export const resumesResumeUserRouter = createProtectedRouter()
stars: true, stars: true,
}, },
}, },
location: {
select: {
name: true,
},
},
user: { user: {
select: { select: {
name: true, name: true,
@ -144,7 +148,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
resume: { resume: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
}, },
@ -160,7 +164,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
id: rs.resume.id, id: rs.resume.id,
isResolved: rs.resume.isResolved, isResolved: rs.resume.isResolved,
isStarredByUser: true, isStarredByUser: true,
location: rs.resume.location, location: rs.resume.location.name,
numComments: rs.resume._count.comments, numComments: rs.resume._count.comments,
numStars: rs.resume._count.stars, numStars: rs.resume._count.stars,
role: rs.resume.role, role: rs.resume.role,
@ -179,7 +183,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
stars: { stars: {
some: { some: {
userId, userId,
@ -209,7 +213,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
by: ['experience'], by: ['experience'],
where: { where: {
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
stars: { stars: {
some: { some: {
@ -236,7 +240,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
_count: { _count: {
_all: true, _all: true,
}, },
by: ['location'], by: ['locationId'],
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
@ -250,7 +254,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
}, },
}); });
const mappedLocationCounts = Object.fromEntries( const mappedLocationCounts = Object.fromEntries(
locationCounts.map((lc) => [lc.location, lc._count._all]), locationCounts.map((lc) => [lc.locationId, lc._count._all]),
); );
const zeroLocationCounts = Object.fromEntries( const zeroLocationCounts = Object.fromEntries(
LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [ LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [
@ -299,7 +303,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
userId, userId,
@ -313,6 +317,11 @@ export const resumesResumeUserRouter = createProtectedRouter()
stars: true, stars: true,
}, },
}, },
location: {
select: {
name: true,
},
},
stars: { stars: {
where: { where: {
userId, userId,
@ -341,7 +350,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
userId, userId,
@ -355,7 +364,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
id: r.id, id: r.id,
isResolved: r.isResolved, isResolved: r.isResolved,
isStarredByUser: r.stars.length > 0, isStarredByUser: r.stars.length > 0,
location: r.location, location: r.location.name,
numComments: r._count.comments, numComments: r._count.comments,
numStars: r._count.stars, numStars: r._count.stars,
role: r.role, role: r.role,
@ -374,7 +383,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
userId, userId,
}, },
@ -400,7 +409,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
by: ['experience'], by: ['experience'],
where: { where: {
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
location: { in: locationFilters }, locationId: { in: locationFilters },
role: { in: roleFilters }, role: { in: roleFilters },
title: { contains: searchValue, mode: 'insensitive' }, title: { contains: searchValue, mode: 'insensitive' },
userId, userId,
@ -423,7 +432,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
_count: { _count: {
_all: true, _all: true,
}, },
by: ['location'], by: ['locationId'],
where: { where: {
experience: { in: experienceFilters }, experience: { in: experienceFilters },
isResolved: isUnreviewed ? false : {}, isResolved: isUnreviewed ? false : {},
@ -433,7 +442,7 @@ export const resumesResumeUserRouter = createProtectedRouter()
}, },
}); });
const mappedLocationCounts = Object.fromEntries( const mappedLocationCounts = Object.fromEntries(
locationCounts.map((lc) => [lc.location, lc._count._all]), locationCounts.map((lc) => [lc.locationId, lc._count._all]),
); );
const zeroLocationCounts = Object.fromEntries( const zeroLocationCounts = Object.fromEntries(
LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [ LOCATIONS.filter((l) => !(l.value in mappedLocationCounts)).map((l) => [

Loading…
Cancel
Save