diff --git a/apps/portal/prisma/schema.prisma b/apps/portal/prisma/schema.prisma index fb263f80..887475b6 100644 --- a/apps/portal/prisma/schema.prisma +++ b/apps/portal/prisma/schema.prisma @@ -454,6 +454,7 @@ model QuestionsQuestionComment { id String @id @default(cuid()) questionId String userId String? + upvotes Int content String @db.Text createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -482,6 +483,7 @@ model QuestionsAnswer { questionId String userId String? content String @db.Text + upvotes Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -510,6 +512,7 @@ model QuestionsAnswerComment { answerId String userId String? content String @db.Text + upvotes Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/apps/portal/src/server/router/questions-question-router.ts b/apps/portal/src/server/router/questions-question-router.ts index d8476d75..9da02d40 100644 --- a/apps/portal/src/server/router/questions-question-router.ts +++ b/apps/portal/src/server/router/questions-question-router.ts @@ -1,4 +1,4 @@ -import { undefined, z } from 'zod'; +import { z } from 'zod'; import { QuestionsQuestionType, Vote } from '@prisma/client'; import { TRPCError } from '@trpc/server'; @@ -11,9 +11,12 @@ export const questionsQuestionRouter = createProtectedRouter() .query('getQuestionsByFilter', { input: z.object({ companyNames: z.string().array(), + cursor: z.object({ + idCursor: z.string().optional(), + lastSeenCursor: z.date().optional(), + upvoteCursor: z.string().optional(), + }).nullish(), endDate: z.date().default(new Date()), - idCursor: z.string().optional(), - lastSeenCursor: z.date().optional(), locations: z.string().array(), pageSize: z.number().default(50), questionTypes: z.nativeEnum(QuestionsQuestionType).array(), @@ -21,9 +24,10 @@ export const questionsQuestionRouter = createProtectedRouter() sortOrder: z.nativeEnum(SortOrder), sortType: z.nativeEnum(SortType), startDate: z.date().optional(), - upvoteCursor: z.string().optional(), }), async resolve({ ctx, input }) { + const { cursor } = input + const sortCondition = input.sortType === SortType.TOP ? [ @@ -46,15 +50,15 @@ export const questionsQuestionRouter = createProtectedRouter() const cursorCondition = input.sortType === SortType.TOP ? { - id: input.idCursor, - upvotes: input.upvoteCursor, + id: cursor ? cursor!.idCursor : undefined, + upvotes: cursor ? cursor!.upvoteCursor : undefined, } : { - id: input.idCursor, - lastSeenAt: input.lastSeenCursor, + id: cursor ? cursor!.idCursor : undefined, + lastSeenAt: cursor ? cursor!.lastSeenCursor : undefined, }; - const toSkip = input.idCursor ? 1 : 0; + const toSkip = cursor ? 1 : 0; const questionsData = await ctx.prisma.questionsQuestion.findMany({ cursor: { @@ -128,7 +132,7 @@ export const questionsQuestionRouter = createProtectedRouter() }); const lastQuestion = questionsData[input.pageSize - 1]; - const nextIdCursor: string = lastQuestion.id; + const nextIdCursor: string | undefined = lastQuestion.id; const nextLastSeenCursor = input.sortType === SortType.NEW ? lastQuestion.lastSeenAt : undefined; const nextupvoteCursor = input.sortType === SortType.TOP ? lastQuestion.upvotes : undefined; @@ -199,11 +203,17 @@ export const questionsQuestionRouter = createProtectedRouter() return question; }); + let nextCursor: typeof cursor | undefined = undefined; + + nextCursor = { + idCursor: nextIdCursor, + lastSeenCursor: nextLastSeenCursor, + upvoteCursor: nextupvoteCursor, + } + return { - nextIdCursor, - nextLastSeenCursor, - nextupvoteCursor, - processedQuestionsData, + nextCursor, + processedQuestionsData } }, })