[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");

@ -406,6 +406,7 @@ model QuestionsQuestion {
questionType QuestionsQuestionType questionType QuestionsQuestionType
lastSeenAt DateTime? lastSeenAt DateTime?
upvotes Int @default(0) upvotes Int @default(0)
numEncounters Int @default(0)
createdAt DateTime @default(now()) createdAt DateTime @default(now())
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt
@ -417,6 +418,7 @@ model QuestionsQuestion {
QuestionsListQuestionEntry QuestionsListQuestionEntry[] QuestionsListQuestionEntry QuestionsListQuestionEntry[]
@@index([lastSeenAt, id]) @@index([lastSeenAt, id])
@@index([numEncounters, id])
@@index([upvotes, id]) @@index([upvotes, id])
} }

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

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

Loading…
Cancel
Save