[questions][feat] update aggregated data

pull/410/head
hpkoh 3 years ago
parent 662d29a199
commit 6e1dd8e17a

@ -24,7 +24,7 @@ export const questionsQuestionEncounterRouter = createProtectedRouter()
const locationCounts: Record<string, number> = {}; const locationCounts: Record<string, number> = {};
const roleCounts:Record<string, number> = {}; const roleCounts:Record<string, number> = {};
const latestSeenAt = questionEncountersData[0].seenAt; let latestSeenAt = questionEncountersData[0].seenAt;
for (let i = 0; i < questionEncountersData.length; i++) { for (let i = 0; i < questionEncountersData.length; i++) {
const encounter = questionEncountersData[i]; const encounter = questionEncountersData[i];

@ -56,6 +56,8 @@ export const questionsQuestionRouter = createProtectedRouter()
lastSeenAt: input.lastSeenCursor, lastSeenAt: input.lastSeenCursor,
}; };
const toSkip = input.idCursor ? 1 : 0;
const questionsData = await ctx.prisma.questionsQuestion.findMany({ const questionsData = await ctx.prisma.questionsQuestion.findMany({
cursor: { cursor: {
...cursorCondition, ...cursorCondition,
@ -83,6 +85,7 @@ export const questionsQuestionRouter = createProtectedRouter()
votes: true, votes: true,
}, },
orderBy: sortCondition, orderBy: sortCondition,
skip: toSkip,
take: input.pageSize, take: input.pageSize,
where: { where: {
...(input.questionTypes.length > 0 ...(input.questionTypes.length > 0
@ -247,15 +250,45 @@ export const questionsQuestionRouter = createProtectedRouter()
0, 0,
); );
const companyCounts: Record<string, number> = {};
const locationCounts: Record<string, number> = {};
const roleCounts:Record<string, number> = {};
let latestSeenAt = questionData.encounters[0].seenAt;
for (let i = 0; i < questionData.encounters.length; i++) {
const encounter = questionData.encounters[i];
latestSeenAt = latestSeenAt < encounter.seenAt ? encounter.seenAt : latestSeenAt;
if (!(encounter.company!.name in companyCounts)) {
companyCounts[encounter.company!.name] = 1;
}
companyCounts[encounter.company!.name] += 1;
if (!(encounter.location in locationCounts)) {
locationCounts[encounter.location] = 1;
}
locationCounts[encounter.location] += 1;
if (!(encounter.role in roleCounts)) {
roleCounts[encounter.role] = 1;
}
roleCounts[encounter.role] += 1;
}
const question: Question = { const question: Question = {
company: questionData.encounters[0].company!.name ?? 'Unknown company', aggregatedQuestionEncounters: {
companyCounts,
latestSeenAt,
locationCounts,
roleCounts,
},
content: questionData.content, content: questionData.content,
id: questionData.id, id: questionData.id,
location: questionData.encounters[0].location ?? 'Unknown location',
numAnswers: questionData._count.answers, numAnswers: questionData._count.answers,
numComments: questionData._count.comments, numComments: questionData._count.comments,
numVotes: votes, numVotes: votes,
role: questionData.encounters[0].role ?? 'Unknown role',
seenAt: questionData.encounters[0].seenAt, seenAt: questionData.encounters[0].seenAt,
type: questionData.questionType, type: questionData.questionType,
updatedAt: questionData.updatedAt, updatedAt: questionData.updatedAt,

Loading…
Cancel
Save