[questions][feat] add encounters sorting

pull/458/head
hpkoh 3 years ago
parent a103879b5c
commit e757fdc962

@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "QuestionsQuestion" ADD COLUMN "numEncounters" INTEGER NOT NULL DEFAULT 0;
-- CreateIndex
CREATE INDEX "QuestionsQuestion_numEncounters_id_idx" ON "QuestionsQuestion"("numEncounters", "id");

@ -400,14 +400,15 @@ enum QuestionsQuestionType {
}
model QuestionsQuestion {
id String @id @default(cuid())
userId String?
content String @db.Text
questionType QuestionsQuestionType
lastSeenAt DateTime?
upvotes Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
id String @id @default(cuid())
userId String?
content String @db.Text
questionType QuestionsQuestionType
lastSeenAt DateTime?
upvotes Int @default(0)
numEncounters Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
encounters QuestionsQuestionEncounter[]
@ -417,6 +418,7 @@ model QuestionsQuestion {
QuestionsListQuestionEntry QuestionsListQuestionEntry[]
@@index([lastSeenAt, id])
@@index([numEncounters, id])
@@index([upvotes, id])
}

@ -59,19 +59,21 @@ export const questionsQuestionEncounterUserRouter = createProtectedRouter()
});
}
if (
questionToUpdate.lastSeenAt === null ||
questionToUpdate.lastSeenAt < input.seenAt
) {
await tx.questionsQuestion.update({
data: {
lastSeenAt: input.seenAt,
},
where: {
id: input.questionId,
await tx.questionsQuestion.update({
data: {
lastSeenAt: (questionToUpdate.lastSeenAt === null ||
questionToUpdate.lastSeenAt < input.seenAt)
? input.seenAt : undefined,
numEncounters: {
increment: 1,
},
});
}
},
where: {
id: input.questionId,
},
});
return questionEncounterCreated;
});
},
@ -178,6 +180,8 @@ export const questionsQuestionEncounterUserRouter = createProtectedRouter()
}),
]);
let lastSeenVal = undefined;
if (questionToUpdate!.lastSeenAt === questionEncounterToDelete.seenAt) {
const latestEncounter =
await ctx.prisma.questionsQuestionEncounter.findFirst({
@ -189,17 +193,20 @@ export const questionsQuestionEncounterUserRouter = createProtectedRouter()
},
});
const lastSeenVal = latestEncounter ? latestEncounter!.seenAt : null;
lastSeenVal = latestEncounter ? latestEncounter!.seenAt : null;
}
await tx.questionsQuestion.update({
await tx.questionsQuestion.update({
data: {
lastSeenAt: lastSeenVal,
numEncounters: {
increment: -1,
},
},
where: {
id: questionToUpdate!.id,
},
});
}
return questionEncounterDeleted;
});

@ -31,24 +31,40 @@ export const questionsQuestionRouter = createRouter()
async resolve({ ctx, input }) {
const { cursor } = input;
const sortCondition =
input.sortType === SortType.TOP
? [
{
upvotes: input.sortOrder,
},
{
id: input.sortOrder,
},
]
: [
{
lastSeenAt: input.sortOrder,
},
{
id: input.sortOrder,
},
];
let sortCondition;
switch (input.sortType) {
case SortType.TOP:
sortCondition = [
{
upvotes: input.sortOrder,
},
{
id: input.sortOrder,
},
]
break;
case SortType.NEW:
sortCondition = [
{
lastSeenAt: input.sortOrder,
},
{
id: input.sortOrder,
},
];
break;
case SortType.ENCOUNTERS:
sortCondition = [
{
numEncounters: input.sortOrder,
},
{
id: input.sortOrder,
},
];
break;
}
const questionsData = await ctx.prisma.questionsQuestion.findMany({
cursor:

Loading…
Cancel
Save