[questions][feat] add nested create encounter

pull/339/head
hpkoh 3 years ago
parent a26bd49a96
commit 182edb6260

@ -1,4 +1,4 @@
import { z } from 'zod'; import { date, z } from 'zod';
import {QuestionsQuestionType, Vote } from '@prisma/client'; import {QuestionsQuestionType, Vote } from '@prisma/client';
import { TRPCError } from '@trpc/server'; import { TRPCError } from '@trpc/server';
@ -9,10 +9,12 @@ import type { Question } from '~/types/questions';
export const questionsQuestionRouter = createProtectedRouter() export const questionsQuestionRouter = createProtectedRouter()
.query('getQuestionsByFilter', { .query('getQuestionsByFilter', {
input: z.object({ input: z.object({
company: z.string().optional(), company: z.string().array().optional(),
location: z.string().optional(), endDate: z.date(),
location: z.string().array().optional(),
questionType: z.nativeEnum(QuestionsQuestionType), questionType: z.nativeEnum(QuestionsQuestionType),
role: z.string().optional(), role: z.string().array().optional(),
startDate: z.date()
}), }),
async resolve({ ctx, input }) { async resolve({ ctx, input }) {
const questionsData = await ctx.prisma.questionsQuestion.findMany({ const questionsData = await ctx.prisma.questionsQuestion.findMany({
@ -28,6 +30,7 @@ export const questionsQuestionRouter = createProtectedRouter()
company: true, company: true,
location: true, location: true,
role: true, role: true,
seenAt: true,
}, },
}, },
user: { user: {
@ -48,10 +51,11 @@ export const questionsQuestionRouter = createProtectedRouter()
.filter((data) => { .filter((data) => {
for (let i = 0; i < data.encounters.length; i++) { for (let i = 0; i < data.encounters.length; i++) {
const encounter = data.encounters[i] const encounter = data.encounters[i]
const matchCompany = (!input.company || (encounter.company === input.company)); const matchCompany = (!input.company || (input.company.includes(encounter.company)));
const matchLocation = (!input.location || (encounter.location === input.location)); const matchLocation = (!input.location || (input.location.includes(encounter.location)));
const matchRole = (!input.company || (encounter.role === input.role)); const matchRole = (!input.role || (input.role.includes(encounter.role)));
if (matchCompany && matchLocation && matchRole) {return true}; const matchDate = encounter.seenAt >= input.startDate && encounter.seenAt <= input.endDate;
if (matchCompany && matchLocation && matchRole && matchDate) {return true};
} }
return false; return false;
}) })
@ -97,16 +101,32 @@ export const questionsQuestionRouter = createProtectedRouter()
}) })
.mutation('create', { .mutation('create', {
input: z.object({ input: z.object({
company: z.string(),
content: z.string(), content: z.string(),
location: z.string(),
questionType: z.nativeEnum(QuestionsQuestionType), questionType: z.nativeEnum(QuestionsQuestionType),
role: z.string(),
seenAt: z.date(),
}), }),
async resolve({ ctx, input }) { async resolve({ ctx, input }) {
const userId = ctx.session?.user?.id; const userId = ctx.session?.user?.id;
return await ctx.prisma.questionsQuestion.create({ return await ctx.prisma.questionsQuestion.create({
data: { data: {
...input, content: input.content,
userId, encounters: {
create: [
{
company :input.company,
location: input.location,
role: input.role,
seenAt: input.seenAt,
userId
}
],
},
questionType: input.questionType,
userId
}, },
}); });
}, },

@ -1,3 +1,11 @@
export enum Status {
New = 0,
Active = 1,
Archived = 2,
Trashed = 3,
Deleted = 4
}
export type Question = { export type Question = {
// TODO: company, location, role maps // TODO: company, location, role maps
company: string; company: string;

Loading…
Cancel
Save