From 88a1f5af105d73bf3d2a2d00b2bf478c39577a83 Mon Sep 17 00:00:00 2001 From: Matthew Wang Date: Sun, 26 Jan 2025 14:09:01 -0500 Subject: [PATCH] Max 5 Reviews Per User (#110) * prevents creation of new review if already 5 * max 2 reviews per cycle * resolved changes --- packages/api/src/router/review.ts | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/api/src/router/review.ts b/packages/api/src/router/review.ts index 217097a..fdf7053 100644 --- a/packages/api/src/router/review.ts +++ b/packages/api/src/router/review.ts @@ -1,4 +1,5 @@ import type { TRPCRouterRecord } from "@trpc/server"; +import { TRPCError } from "@trpc/server"; import Fuse from "fuse.js"; import { z } from "zod"; @@ -72,7 +73,33 @@ export const reviewRouter = { create: protectedProcedure .input(CreateReviewSchema) - .mutation(({ ctx, input }) => { + .mutation(async ({ ctx, input }) => { + if (!input.profileId) { + throw new TRPCError({ + code: "FORBIDDEN", + message: "You must be logged in to leave a review", + }); + } + const reviews = await ctx.db.query.Review.findMany({ + where: eq(Review.profileId, input.profileId), + }); + if (reviews.length >= 5) { + throw new TRPCError({ + code: "PRECONDITION_FAILED", + message: "You can only leave 5 reviews", + }); + } + const reviewsInSameCycle = reviews.filter( + (review) => + review.workTerm === input.workTerm && + review.workYear === input.workYear, + ); + if (reviewsInSameCycle.length >= 2) { + throw new TRPCError({ + code: "PRECONDITION_FAILED", + message: "You can only leave 2 reviews per cycle", + }); + } return ctx.db.insert(Review).values(input); }),