From 452686760140368775dfb8a7da76081dc852deee Mon Sep 17 00:00:00 2001
From: Keane Chan <e0425601@u.nus.edu>
Date: Thu, 20 Oct 2022 22:15:54 +0800
Subject: [PATCH] [resumes][feat] add query for max resume upvote count

---
 .../resumes/badges/ResumeUserBadges.tsx       | 10 ++++---
 .../router/resumes/resumes-resume-router.ts   | 26 +++++++++++++++++++
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/apps/portal/src/components/resumes/badges/ResumeUserBadges.tsx b/apps/portal/src/components/resumes/badges/ResumeUserBadges.tsx
index 9d0a9795..ffcfef07 100644
--- a/apps/portal/src/components/resumes/badges/ResumeUserBadges.tsx
+++ b/apps/portal/src/components/resumes/badges/ResumeUserBadges.tsx
@@ -9,15 +9,19 @@ type Props = Readonly<{
 }>;
 
 export default function ResumeUserBadges({ userId }: Props) {
-  const userReviewedResumesCountQuery = trpc.useQuery([
+  const userReviewedResumeCountQuery = trpc.useQuery([
     'resumes.resume.findUserReviewedResumeCount',
     { userId },
   ]);
+  const userMaxResumeUpvoteCountQuery = trpc.useQuery([
+    'resumes.resume.findUserMaxResumeUpvoteCount',
+    { userId },
+  ]);
 
   // TODO: Add other badges in
   const payload: BadgePayload = {
-    maxResumeUpvoteCount: 10,
-    reviewedResumesCount: userReviewedResumesCountQuery.data ?? 0,
+    maxResumeUpvoteCount: userMaxResumeUpvoteCountQuery.data ?? 0,
+    reviewedResumesCount: userReviewedResumeCountQuery.data ?? 0,
     topUpvotedCommentCount: 10,
   };
 
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 0747c535..f5797c9c 100644
--- a/apps/portal/src/server/router/resumes/resumes-resume-router.ts
+++ b/apps/portal/src/server/router/resumes/resumes-resume-router.ts
@@ -157,4 +157,30 @@ export const resumesRouter = createRouter()
         },
       });
     },
+  })
+  .query('findUserMaxResumeUpvoteCount', {
+    input: z.object({
+      userId: z.string(),
+    }),
+    async resolve({ ctx, input }) {
+      const highestUpvotedResume = await ctx.prisma.resumesResume.findFirst({
+        include: {
+          _count: {
+            select: {
+              stars: true,
+            },
+          },
+        },
+        orderBy: {
+          stars: {
+            _count: 'desc',
+          },
+        },
+        where: {
+          userId: input.userId,
+        },
+      });
+
+      return highestUpvotedResume?._count?.stars ?? 0;
+    },
   });