[questions][feat] add sorting

pull/384/head
hpkoh 3 years ago
parent 471ff0fa70
commit 724ead1951

@ -0,0 +1,12 @@
/*
Warnings:
- Added the required column `upvotes` to the `QuestionsQuestion` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "QuestionsQuestion" ADD COLUMN "lastSeenAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN "upvotes" INTEGER NOT NULL;
-- AlterTable
ALTER TABLE "QuestionsQuestionEncounter" ADD COLUMN "netVotes" INTEGER NOT NULL DEFAULT 0;

@ -0,0 +1,12 @@
/*
Warnings:
- You are about to drop the column `netVotes` on the `QuestionsQuestionEncounter` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "QuestionsQuestion" ALTER COLUMN "lastSeenAt" DROP DEFAULT,
ALTER COLUMN "upvotes" SET DEFAULT 0;
-- AlterTable
ALTER TABLE "QuestionsQuestionEncounter" DROP COLUMN "netVotes";

@ -394,8 +394,8 @@ model QuestionsQuestion {
userId String? userId String?
content String @db.Text content String @db.Text
questionType QuestionsQuestionType questionType QuestionsQuestionType
lastSeenAt DateTime @default(now()) lastSeenAt DateTime
upvotes Int upvotes Int @default(0)
createdAt DateTime @default(now()) createdAt DateTime @default(now())
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt
@ -414,7 +414,6 @@ model QuestionsQuestionEncounter {
companyId String companyId String
location String @db.Text location String @db.Text
role String @db.Text role String @db.Text
netVotes Int @default(0)
seenAt DateTime seenAt DateTime
createdAt DateTime @default(now()) createdAt DateTime @default(now())
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt

@ -24,6 +24,21 @@ export const questionsQuestionRouter = createProtectedRouter()
startDate: z.date().default(new Date(Date.now() - TWO_WEEK_IN_MS)), startDate: z.date().default(new Date(Date.now() - TWO_WEEK_IN_MS)),
}), }),
async resolve({ ctx, input }) { async resolve({ ctx, input }) {
let sortCondition;
switch(input.sortType) {
case SortType.TOP:
sortCondition = {
upvotes: input.sortOrder,
}
break;
case SortType.NEW:
sortCondition = {
lastSeenAt: input.sortOrder,
}
break;
}
const questionsData = await ctx.prisma.questionsQuestion.findMany({ const questionsData = await ctx.prisma.questionsQuestion.findMany({
include: { include: {
_count: { _count: {
@ -48,7 +63,7 @@ export const questionsQuestionRouter = createProtectedRouter()
votes: true, votes: true,
}, },
orderBy: { orderBy: {
createdAt: 'desc', ...sortCondition,
}, },
where: { where: {
...(input.questionTypes.length > 0 ...(input.questionTypes.length > 0
@ -214,7 +229,6 @@ export const questionsQuestionRouter = createProtectedRouter()
return await ctx.prisma.questionsQuestion.create({ return await ctx.prisma.questionsQuestion.create({
data: { data: {
content: input.content, content: input.content,
lastSeenAt: input.seenAt,
encounters: { encounters: {
create: { create: {
company: { company: {
@ -232,6 +246,7 @@ export const questionsQuestionRouter = createProtectedRouter()
}, },
}, },
}, },
lastSeenAt: input.seenAt,
questionType: input.questionType, questionType: input.questionType,
userId, userId,
}, },
@ -326,18 +341,28 @@ export const questionsQuestionRouter = createProtectedRouter()
const userId = ctx.session?.user?.id; const userId = ctx.session?.user?.id;
const { questionId, vote } = input; const { questionId, vote } = input;
return await ctx.prisma.questionsQuestionVote.create({ const incrementValue = vote === Vote.UPVOTE ? 1 : -1;
question: {
update :{
} const [questionVote, question] = await ctx.prisma.$transaction([
} ctx.prisma.questionsQuestionVote.create({
data: { data: {
questionId, questionId,
userId, userId,
vote, vote,
}, },
}); }),
ctx.prisma.questionsQuestion.update({
data: {
upvotes : {
increment: incrementValue,
},
},
where: {
id: questionId,
},
})
]);
return questionVote;
}, },
}) })
.mutation('updateVote', { .mutation('updateVote', {
@ -362,14 +387,30 @@ export const questionsQuestionRouter = createProtectedRouter()
}); });
} }
return await ctx.prisma.questionsQuestionVote.update({ const incrementValue = vote === Vote.UPVOTE ? 2 : -2;
data: {
vote, const [questionVote, question] = await ctx.prisma.$transaction([
}, ctx.prisma.questionsQuestionVote.update({
where: { data: {
id, vote,
}, },
}); where: {
id,
},
}),
ctx.prisma.questionsQuestion.update({
data: {
upvotes : {
increment: incrementValue,
},
},
where: {
id: voteToUpdate.questionId,
},
})
]);
return questionVote;
}, },
}) })
.mutation('deleteVote', { .mutation('deleteVote', {
@ -392,10 +433,25 @@ export const questionsQuestionRouter = createProtectedRouter()
}); });
} }
return await ctx.prisma.questionsQuestionVote.delete({ const incrementValue = voteToDelete.vote === Vote.UPVOTE ? -1 : 1;
where: {
id: input.id, const [questionVote, question] = await ctx.prisma.$transaction([
}, ctx.prisma.questionsQuestionVote.delete({
}); where: {
id: input.id,
},
}),
ctx.prisma.questionsQuestion.update({
data: {
upvotes : {
increment: incrementValue,
},
},
where: {
id: voteToDelete.questionId,
},
})
]);
return questionVote;
}, },
}); });

Loading…
Cancel
Save