diff --git a/apps/portal/prisma/migrations/20221010055218_update_question_encounter_to_use_company_id/migration.sql b/apps/portal/prisma/migrations/20221010055218_update_question_encounter_to_use_company_id/migration.sql new file mode 100644 index 00000000..c79e0b9c --- /dev/null +++ b/apps/portal/prisma/migrations/20221010055218_update_question_encounter_to_use_company_id/migration.sql @@ -0,0 +1,13 @@ +/* + Warnings: + + - You are about to drop the column `company` on the `QuestionsQuestionEncounter` table. All the data in the column will be lost. + - Added the required column `companyId` to the `QuestionsQuestionEncounter` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "QuestionsQuestionEncounter" DROP COLUMN "company", +ADD COLUMN "companyId" TEXT NOT NULL; + +-- AddForeignKey +ALTER TABLE "QuestionsQuestionEncounter" ADD CONSTRAINT "QuestionsQuestionEncounter_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/apps/portal/prisma/schema.prisma b/apps/portal/prisma/schema.prisma index 59c53a40..03266391 100644 --- a/apps/portal/prisma/schema.prisma +++ b/apps/portal/prisma/schema.prisma @@ -96,6 +96,8 @@ model Company { logoUrl String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt + + questionsQuestionEncounter QuestionsQuestionEncounter[] } // Start of Resumes project models. @@ -202,14 +204,15 @@ model QuestionsQuestionEncounter { id String @id @default(cuid()) questionId String userId String? - // TODO: sync with models - company String @db.Text + // TODO: sync with models (location, role) + companyId String location String @db.Text role String @db.Text seenAt DateTime createdAt DateTime @default(now()) updatedAt DateTime @updatedAt + company Company? @relation(fields: [companyId], references: [id], onDelete: SetNull) user User? @relation(fields: [userId], references: [id], onDelete: SetNull) question QuestionsQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade) } diff --git a/apps/portal/src/server/router/questions-question-router.ts b/apps/portal/src/server/router/questions-question-router.ts index 39dafd98..09a6861d 100644 --- a/apps/portal/src/server/router/questions-question-router.ts +++ b/apps/portal/src/server/router/questions-question-router.ts @@ -59,7 +59,7 @@ export const questionsQuestionRouter = createProtectedRouter() const encounter = data.encounters[i]; const matchCompany = input.companies.length === 0 || - input.companies.includes(encounter.company); + input.companies.includes(encounter.company!.id); const matchLocation = input.locations.length === 0 || input.locations.includes(encounter.location); @@ -93,7 +93,7 @@ export const questionsQuestionRouter = createProtectedRouter() ); const question: Question = { - company: data.encounters[0].company, + company: data.encounters[0].company!.name ?? 'Unknown company', content: data.content, id: data.id, location: data.encounters[0].location ?? 'Unknown location', @@ -166,7 +166,7 @@ export const questionsQuestionRouter = createProtectedRouter() ); const question: Question = { - company: questionData.encounters[0].company, + company: questionData.encounters[0].company!.name ?? 'Unknown company', content: questionData.content, id: questionData.id, location: questionData.encounters[0].location ?? 'Unknown location', @@ -184,7 +184,7 @@ export const questionsQuestionRouter = createProtectedRouter() }) .mutation('create', { input: z.object({ - company: z.string(), + companyId: z.string(), content: z.string(), location: z.string(), questionType: z.nativeEnum(QuestionsQuestionType), @@ -194,13 +194,13 @@ export const questionsQuestionRouter = createProtectedRouter() async resolve({ ctx, input }) { const userId = ctx.session?.user?.id; - const question = await ctx.prisma.questionsQuestion.create({ + return await ctx.prisma.questionsQuestion.create({ data: { content: input.content, encounters: { create: [ { - company: input.company, + company: input.companyId, location: input.location, role: input.role, seenAt: input.seenAt, @@ -212,20 +212,6 @@ export const questionsQuestionRouter = createProtectedRouter() userId, }, }); - - // Create question encounter - await ctx.prisma.questionsQuestionEncounter.create({ - data: { - company: input.company, - location: input.location, - questionId: question.id, - role: input.role, - seenAt: input.seenAt, - userId, - }, - }); - - return question; }, }) .mutation('update', { diff --git a/apps/portal/src/types/questions.d.ts b/apps/portal/src/types/questions.d.ts index 3797bf38..90bb8b32 100644 --- a/apps/portal/src/types/questions.d.ts +++ b/apps/portal/src/types/questions.d.ts @@ -1,3 +1,5 @@ +import type { QuestionsQuestionType } from '@prisma/client'; + export type Question = { // TODO: company, location, role maps company: string; @@ -9,7 +11,7 @@ export type Question = { numVotes: number; role: string; seenAt: Date; - type: stringl; + type: QuestionsQuestionType; updatedAt: Date; user: string; };