From 182edb626039e67322328c9d9ffd03c8bf4db6ca Mon Sep 17 00:00:00 2001 From: hpkoh Date: Sun, 9 Oct 2022 17:55:17 +0800 Subject: [PATCH] [questions][feat] add nested create encounter --- .../router/questions-question-router.ts | 40 ++++++++++++++----- apps/portal/src/types/questions.d.ts | 8 ++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/apps/portal/src/server/router/questions-question-router.ts b/apps/portal/src/server/router/questions-question-router.ts index 8918f036..3e23fba1 100644 --- a/apps/portal/src/server/router/questions-question-router.ts +++ b/apps/portal/src/server/router/questions-question-router.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { date, z } from 'zod'; import {QuestionsQuestionType, Vote } from '@prisma/client'; import { TRPCError } from '@trpc/server'; @@ -9,10 +9,12 @@ import type { Question } from '~/types/questions'; export const questionsQuestionRouter = createProtectedRouter() .query('getQuestionsByFilter', { input: z.object({ - company: z.string().optional(), - location: z.string().optional(), + company: z.string().array().optional(), + endDate: z.date(), + location: z.string().array().optional(), questionType: z.nativeEnum(QuestionsQuestionType), - role: z.string().optional(), + role: z.string().array().optional(), + startDate: z.date() }), async resolve({ ctx, input }) { const questionsData = await ctx.prisma.questionsQuestion.findMany({ @@ -28,6 +30,7 @@ export const questionsQuestionRouter = createProtectedRouter() company: true, location: true, role: true, + seenAt: true, }, }, user: { @@ -48,10 +51,11 @@ export const questionsQuestionRouter = createProtectedRouter() .filter((data) => { for (let i = 0; i < data.encounters.length; i++) { const encounter = data.encounters[i] - const matchCompany = (!input.company || (encounter.company === input.company)); - const matchLocation = (!input.location || (encounter.location === input.location)); - const matchRole = (!input.company || (encounter.role === input.role)); - if (matchCompany && matchLocation && matchRole) {return true}; + const matchCompany = (!input.company || (input.company.includes(encounter.company))); + const matchLocation = (!input.location || (input.location.includes(encounter.location))); + const matchRole = (!input.role || (input.role.includes(encounter.role))); + const matchDate = encounter.seenAt >= input.startDate && encounter.seenAt <= input.endDate; + if (matchCompany && matchLocation && matchRole && matchDate) {return true}; } return false; }) @@ -97,16 +101,32 @@ export const questionsQuestionRouter = createProtectedRouter() }) .mutation('create', { input: z.object({ + company: z.string(), content: z.string(), + location: z.string(), questionType: z.nativeEnum(QuestionsQuestionType), + role: z.string(), + seenAt: z.date(), }), async resolve({ ctx, input }) { const userId = ctx.session?.user?.id; return await ctx.prisma.questionsQuestion.create({ data: { - ...input, - userId, + content: input.content, + encounters: { + create: [ + { + company :input.company, + location: input.location, + role: input.role, + seenAt: input.seenAt, + userId + } + ], + }, + questionType: input.questionType, + userId }, }); }, diff --git a/apps/portal/src/types/questions.d.ts b/apps/portal/src/types/questions.d.ts index fa72f638..2f553164 100644 --- a/apps/portal/src/types/questions.d.ts +++ b/apps/portal/src/types/questions.d.ts @@ -1,3 +1,11 @@ +export enum Status { + New = 0, + Active = 1, + Archived = 2, + Trashed = 3, + Deleted = 4 +} + export type Question = { // TODO: company, location, role maps company: string;