From 1e33aa0e5bfe3eace1518a1355d50f3d44961f4c Mon Sep 17 00:00:00 2001 From: Tan Su Yin Date: Sat, 8 Oct 2022 17:21:28 +0800 Subject: [PATCH] [resumes][feat] Add protected tabs router for browse page --- apps/portal/src/server/router/index.ts | 2 + .../resumes-resume-protected-tabs-router.ts | 93 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 apps/portal/src/server/router/resumes-resume-protected-tabs-router.ts diff --git a/apps/portal/src/server/router/index.ts b/apps/portal/src/server/router/index.ts index ddeff431..cae45dde 100644 --- a/apps/portal/src/server/router/index.ts +++ b/apps/portal/src/server/router/index.ts @@ -4,6 +4,7 @@ import { createRouter } from './context'; import { protectedExampleRouter } from './protected-example-router'; import { resumesRouter } from './resumes'; import { resumesDetailsRouter } from './resumes-details-router'; +import { resumesResumeProtectedTabsRouter } from './resumes-resume-protected-tabs-router'; import { resumesResumeUserRouter } from './resumes-resume-user-router'; import { resumeReviewsRouter } from './resumes-reviews-router'; import { resumesReviewsUserRouter } from './resumes-reviews-user-router'; @@ -21,6 +22,7 @@ export const appRouter = createRouter() .merge('resumes.resume.', resumesRouter) .merge('resumes.details.', resumesDetailsRouter) .merge('resumes.resume.user.', resumesResumeUserRouter) + .merge('resumes.resume.browse.', resumesResumeProtectedTabsRouter) .merge('resumes.reviews.', resumeReviewsRouter) .merge('resumes.reviews.user.', resumesReviewsUserRouter); diff --git a/apps/portal/src/server/router/resumes-resume-protected-tabs-router.ts b/apps/portal/src/server/router/resumes-resume-protected-tabs-router.ts new file mode 100644 index 00000000..dd6535bb --- /dev/null +++ b/apps/portal/src/server/router/resumes-resume-protected-tabs-router.ts @@ -0,0 +1,93 @@ +import { createProtectedRouter } from './context'; + +import type { Resume } from '~/types/resume'; + +export const resumesResumeProtectedTabsRouter = createProtectedRouter() + .query('stars', { + async resolve({ ctx }) { + const userId = ctx.session?.user?.id; + const resumeStarsData = await ctx.prisma.resumesStar.findMany({ + include: { + resume: { + include: { + _count: { + select: { + comments: true, + stars: true, + }, + }, + }, + }, + user: { + select: { + name: true, + }, + }, + }, + orderBy: { + createdAt: 'desc', + }, + where: { + userId, + }, + }); + return resumeStarsData.map((rs) => { + const resume: Resume = { + additionalInfo: rs.resume.additionalInfo, + createdAt: rs.resume.createdAt, + experience: rs.resume.experience, + id: rs.id, + location: rs.resume.location, + numComments: rs.resume._count.comments, + numStars: rs.resume._count.stars, + role: rs.resume.role, + title: rs.resume.title, + url: rs.resume.url, + user: rs.user.name!, + }; + return resume; + }); + }, + }) + .query('my', { + async resolve({ ctx }) { + const userId = ctx.session?.user?.id; + const resumesData = await ctx.prisma.resumesResume.findMany({ + include: { + _count: { + select: { + comments: true, + stars: true, + }, + }, + user: { + select: { + name: true, + }, + }, + }, + orderBy: { + createdAt: 'desc', + }, + where: { + userId, + }, + }); + return resumesData.map((r) => { + const resume: Resume = { + additionalInfo: r.additionalInfo, + createdAt: r.createdAt, + experience: r.experience, + id: r.id, + location: r.location, + numComments: r._count.comments, + numStars: r._count.stars, + role: r.role, + title: r.title, + url: r.url, + user: r.user.name!, + }; + return resume; + }); + }, + });