[questions][feat] parallelize queries

pull/409/head
hpkoh 3 years ago
parent 3847b0569d
commit 7f23492d53

@ -0,0 +1,8 @@
-- AlterTable
ALTER TABLE "QuestionsQuestion" ADD COLUMN "contentSearch" TSVECTOR
GENERATED ALWAYS AS
(to_tsvector('english', coalesce(content, '')))
STORED;
-- CreateIndex
CREATE INDEX "QuestionsQuestion_contentSearch_idx" ON "QuestionsQuestion" USING GIN("contentSearch");

@ -0,0 +1,8 @@
-- DropIndex
DROP INDEX "QuestionsQuestion_contentSearch_idx";
-- AlterTable
ALTER TABLE "QuestionsQuestion" ALTER COLUMN "contentSearch" DROP DEFAULT;
-- CreateIndex
CREATE INDEX "QuestionsQuestion_contentSearch_idx" ON "QuestionsQuestion"("contentSearch");

@ -71,18 +71,20 @@ export const questionsQuestionEncounterRouter = createProtectedRouter()
const userId = ctx.session?.user?.id;
return await ctx.prisma.$transaction(async (tx) => {
const questionToUpdate = await tx.questionsQuestion.findUnique({
where: {
id: input.questionId,
},
});
const [questionToUpdate, questionEncounterCreated] = await Promise.all([
tx.questionsQuestion.findUnique({
where: {
id: input.questionId,
},
}),
tx.questionsQuestionEncounter.create({
data: {
...input,
userId,
},
})
]);
const questionEncounterCreated = await tx.questionsQuestionEncounter.create({
data: {
...input,
userId,
},
});
if (questionToUpdate === null) {
throw new TRPCError({
@ -131,20 +133,22 @@ export const questionsQuestionEncounterRouter = createProtectedRouter()
}
return await ctx.prisma.$transaction(async (tx) => {
const questionToUpdate = await tx.questionsQuestion.findUnique({
where: {
id: questionEncounterToUpdate.questionId,
},
});
const [questionToUpdate, questionEncounterUpdated] = await Promise.all([
tx.questionsQuestion.findUnique({
where: {
id: questionEncounterToUpdate.questionId,
},
}),
tx.prisma.questionsQuestionEncounter.update({
data: {
...input,
},
where: {
id: input.id,
},
})
]);
const questionEncounterUpdated = await ctx.prisma.questionsQuestionEncounter.update({
data: {
...input,
},
where: {
id: input.id,
},
});
if (questionToUpdate!.lastSeenAt === questionEncounterToUpdate.seenAt) {
const latestEncounter = await ctx.prisma.questionsQuestionEncounter.findFirst({
@ -194,17 +198,18 @@ export const questionsQuestionEncounterRouter = createProtectedRouter()
}
return await ctx.prisma.$transaction(async (tx) => {
const questionToUpdate = await tx.questionsQuestion.findUnique({
where: {
id: questionEncounterToDelete.questionId,
},
});
const questionEncounterDeleted = await ctx.prisma.questionsQuestionEncounter.delete({
where: {
id: input.id,
},
});
const [questionToUpdate, questionEncounterDeleted] = await Promise.all([
tx.questionsQuestion.findUnique({
where: {
id: questionEncounterToDelete.questionId,
},
}),
tx.prisma.questionsQuestionEncounter.delete({
where: {
id: input.id,
},
})
]);
if (questionToUpdate!.lastSeenAt === questionEncounterToDelete.seenAt) {
const latestEncounter = await ctx.prisma.questionsQuestionEncounter.findFirst({

Loading…
Cancel
Save