[questions][chore] update cursor to support adapter

pull/410/head
hpkoh 3 years ago
parent 9e8f2dd2ce
commit 3ac3f8ee2d

@ -454,6 +454,7 @@ model QuestionsQuestionComment {
id String @id @default(cuid()) id String @id @default(cuid())
questionId String questionId String
userId String? userId String?
upvotes Int
content String @db.Text content String @db.Text
createdAt DateTime @default(now()) createdAt DateTime @default(now())
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt
@ -482,6 +483,7 @@ model QuestionsAnswer {
questionId String questionId String
userId String? userId String?
content String @db.Text content String @db.Text
upvotes Int
createdAt DateTime @default(now()) createdAt DateTime @default(now())
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt
@ -510,6 +512,7 @@ model QuestionsAnswerComment {
answerId String answerId String
userId String? userId String?
content String @db.Text content String @db.Text
upvotes Int
createdAt DateTime @default(now()) createdAt DateTime @default(now())
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt

@ -1,4 +1,4 @@
import { undefined, z } from 'zod'; import { z } from 'zod';
import { QuestionsQuestionType, Vote } from '@prisma/client'; import { QuestionsQuestionType, Vote } from '@prisma/client';
import { TRPCError } from '@trpc/server'; import { TRPCError } from '@trpc/server';
@ -11,9 +11,12 @@ export const questionsQuestionRouter = createProtectedRouter()
.query('getQuestionsByFilter', { .query('getQuestionsByFilter', {
input: z.object({ input: z.object({
companyNames: z.string().array(), 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()), endDate: z.date().default(new Date()),
idCursor: z.string().optional(),
lastSeenCursor: z.date().optional(),
locations: z.string().array(), locations: z.string().array(),
pageSize: z.number().default(50), pageSize: z.number().default(50),
questionTypes: z.nativeEnum(QuestionsQuestionType).array(), questionTypes: z.nativeEnum(QuestionsQuestionType).array(),
@ -21,9 +24,10 @@ export const questionsQuestionRouter = createProtectedRouter()
sortOrder: z.nativeEnum(SortOrder), sortOrder: z.nativeEnum(SortOrder),
sortType: z.nativeEnum(SortType), sortType: z.nativeEnum(SortType),
startDate: z.date().optional(), startDate: z.date().optional(),
upvoteCursor: z.string().optional(),
}), }),
async resolve({ ctx, input }) { async resolve({ ctx, input }) {
const { cursor } = input
const sortCondition = const sortCondition =
input.sortType === SortType.TOP input.sortType === SortType.TOP
? [ ? [
@ -46,15 +50,15 @@ export const questionsQuestionRouter = createProtectedRouter()
const cursorCondition = const cursorCondition =
input.sortType === SortType.TOP input.sortType === SortType.TOP
? { ? {
id: input.idCursor, id: cursor ? cursor!.idCursor : undefined,
upvotes: input.upvoteCursor, upvotes: cursor ? cursor!.upvoteCursor : undefined,
} }
: { : {
id: input.idCursor, id: cursor ? cursor!.idCursor : undefined,
lastSeenAt: input.lastSeenCursor, lastSeenAt: cursor ? cursor!.lastSeenCursor : undefined,
}; };
const toSkip = input.idCursor ? 1 : 0; const toSkip = cursor ? 1 : 0;
const questionsData = await ctx.prisma.questionsQuestion.findMany({ const questionsData = await ctx.prisma.questionsQuestion.findMany({
cursor: { cursor: {
@ -128,7 +132,7 @@ export const questionsQuestionRouter = createProtectedRouter()
}); });
const lastQuestion = questionsData[input.pageSize - 1]; 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 nextLastSeenCursor = input.sortType === SortType.NEW ? lastQuestion.lastSeenAt : undefined;
const nextupvoteCursor = input.sortType === SortType.TOP ? lastQuestion.upvotes : undefined; const nextupvoteCursor = input.sortType === SortType.TOP ? lastQuestion.upvotes : undefined;
@ -199,11 +203,17 @@ export const questionsQuestionRouter = createProtectedRouter()
return question; return question;
}); });
let nextCursor: typeof cursor | undefined = undefined;
nextCursor = {
idCursor: nextIdCursor,
lastSeenCursor: nextLastSeenCursor,
upvoteCursor: nextupvoteCursor,
}
return { return {
nextIdCursor, nextCursor,
nextLastSeenCursor, processedQuestionsData
nextupvoteCursor,
processedQuestionsData,
} }
}, },
}) })

Loading…
Cancel
Save