From 7a5e0bf248ade96b2e6ee8ac310669d044de6a79 Mon Sep 17 00:00:00 2001 From: "Mike P. Sinn" Date: Mon, 2 Sep 2024 21:48:40 -0500 Subject: [PATCH] Add DFDA treatment rating tables and enums Introduce new tables for DFDA conditions, symptoms, treatments, side effects, and causes along with necessary relations. This includes creation of corresponding enums, indexes, and foreign key constraints to maintain data integrity. Additionally, user report tables for conditions, symptoms, treatments, and side effects are added. --- .../migration.sql | 301 ++++++++++++++++++ prisma/schema.prisma | 220 +++++++++++++ 2 files changed, 521 insertions(+) create mode 100644 prisma/migrations/20240903023143_dfda_treatment_ratings/migration.sql diff --git a/prisma/migrations/20240903023143_dfda_treatment_ratings/migration.sql b/prisma/migrations/20240903023143_dfda_treatment_ratings/migration.sql new file mode 100644 index 00000000..4c0caf0e --- /dev/null +++ b/prisma/migrations/20240903023143_dfda_treatment_ratings/migration.sql @@ -0,0 +1,301 @@ +-- CreateEnum +CREATE TYPE "Severity" AS ENUM ('MINIMAL', 'MILD', 'MODERATE', 'SEVERE', 'EXTREME'); + +-- CreateEnum +CREATE TYPE "Effectiveness" AS ENUM ('MUCH_WORSE', 'WORSE', 'NO_EFFECT', 'MODERATE_IMPROVEMENT', 'MAJOR_IMPROVEMENT'); + +-- CreateTable +CREATE TABLE "DfdaCondition" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "content" TEXT, + "featuredImage" TEXT, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "numberOfTreatments" INTEGER NOT NULL, + "numberOfSymptoms" INTEGER, + "numberOfCauses" INTEGER NOT NULL, + + CONSTRAINT "DfdaCondition_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaSymptom" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "content" TEXT, + "featuredImage" TEXT, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "numberOfConditions" INTEGER NOT NULL, + + CONSTRAINT "DfdaSymptom_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaTreatment" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "content" TEXT, + "featuredImage" TEXT, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "numberOfConditions" INTEGER, + "numberOfSideEffects" INTEGER NOT NULL, + + CONSTRAINT "DfdaTreatment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaSideEffect" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "content" TEXT, + "featuredImage" TEXT, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "numberOfTreatments" INTEGER NOT NULL, + + CONSTRAINT "DfdaSideEffect_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaCause" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "content" TEXT, + "featuredImage" TEXT, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "numberOfConditions" INTEGER NOT NULL, + + CONSTRAINT "DfdaCause_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaConditionSymptom" ( + "id" SERIAL NOT NULL, + "conditionId" INTEGER NOT NULL, + "symptomId" INTEGER NOT NULL, + "votes" INTEGER NOT NULL, + "extreme" INTEGER, + "severe" INTEGER, + "moderate" INTEGER, + "mild" INTEGER, + "minimal" INTEGER, + "noSymptoms" INTEGER, + "updatedAt" TIMESTAMP(3) NOT NULL, + "deletedAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "DfdaConditionSymptom_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaConditionTreatment" ( + "id" SERIAL NOT NULL, + "conditionId" INTEGER NOT NULL, + "treatmentId" INTEGER NOT NULL, + "majorImprovement" INTEGER NOT NULL DEFAULT 0, + "moderateImprovement" INTEGER NOT NULL DEFAULT 0, + "noEffect" INTEGER NOT NULL DEFAULT 0, + "worse" INTEGER NOT NULL DEFAULT 0, + "muchWorse" INTEGER NOT NULL DEFAULT 0, + "popularity" INTEGER NOT NULL DEFAULT 0, + "averageEffect" INTEGER NOT NULL DEFAULT 0, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + + CONSTRAINT "DfdaConditionTreatment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaTreatmentSideEffect" ( + "id" SERIAL NOT NULL, + "treatmentId" INTEGER NOT NULL, + "sideEffectId" INTEGER NOT NULL, + "votesPercent" INTEGER NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + + CONSTRAINT "DfdaTreatmentSideEffect_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaConditionCause" ( + "id" SERIAL NOT NULL, + "conditionId" INTEGER NOT NULL, + "causeId" INTEGER NOT NULL, + "votesPercent" INTEGER NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + + CONSTRAINT "DfdaConditionCause_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaUserConditionReport" ( + "id" SERIAL NOT NULL, + "userId" TEXT NOT NULL, + "conditionId" INTEGER NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "severity" "Severity" NOT NULL, + + CONSTRAINT "DfdaUserConditionReport_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaUserSymptomReport" ( + "id" SERIAL NOT NULL, + "userId" TEXT NOT NULL, + "symptomId" INTEGER NOT NULL, + "conditionId" INTEGER, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "severity" "Severity" NOT NULL, + + CONSTRAINT "DfdaUserSymptomReport_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaUserTreatmentReport" ( + "id" SERIAL NOT NULL, + "userId" TEXT NOT NULL, + "treatmentId" INTEGER NOT NULL, + "conditionId" INTEGER, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "effectiveness" "Effectiveness" NOT NULL, + + CONSTRAINT "DfdaUserTreatmentReport_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DfdaUserSideEffectReport" ( + "id" SERIAL NOT NULL, + "userId" TEXT NOT NULL, + "sideEffectId" INTEGER NOT NULL, + "treatmentId" INTEGER, + "updatedAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + "severity" "Severity" NOT NULL, + + CONSTRAINT "DfdaUserSideEffectReport_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaCondition_name_key" ON "DfdaCondition"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaCondition_description_key" ON "DfdaCondition"("description"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaSymptom_name_key" ON "DfdaSymptom"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaSymptom_description_key" ON "DfdaSymptom"("description"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaTreatment_name_key" ON "DfdaTreatment"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaTreatment_description_key" ON "DfdaTreatment"("description"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaSideEffect_name_key" ON "DfdaSideEffect"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaSideEffect_description_key" ON "DfdaSideEffect"("description"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaCause_name_key" ON "DfdaCause"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaCause_description_key" ON "DfdaCause"("description"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaConditionSymptom_conditionId_symptomId_key" ON "DfdaConditionSymptom"("conditionId", "symptomId"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaConditionTreatment_treatmentId_conditionId_key" ON "DfdaConditionTreatment"("treatmentId", "conditionId"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaTreatmentSideEffect_treatmentId_sideEffectId_key" ON "DfdaTreatmentSideEffect"("treatmentId", "sideEffectId"); + +-- CreateIndex +CREATE UNIQUE INDEX "DfdaConditionCause_causeId_conditionId_key" ON "DfdaConditionCause"("causeId", "conditionId"); + +-- AddForeignKey +ALTER TABLE "DfdaConditionSymptom" ADD CONSTRAINT "DfdaConditionSymptom_conditionId_fkey" FOREIGN KEY ("conditionId") REFERENCES "DfdaCondition"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaConditionSymptom" ADD CONSTRAINT "DfdaConditionSymptom_symptomId_fkey" FOREIGN KEY ("symptomId") REFERENCES "DfdaSymptom"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaConditionTreatment" ADD CONSTRAINT "DfdaConditionTreatment_conditionId_fkey" FOREIGN KEY ("conditionId") REFERENCES "DfdaCondition"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaConditionTreatment" ADD CONSTRAINT "DfdaConditionTreatment_treatmentId_fkey" FOREIGN KEY ("treatmentId") REFERENCES "DfdaTreatment"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaTreatmentSideEffect" ADD CONSTRAINT "DfdaTreatmentSideEffect_treatmentId_fkey" FOREIGN KEY ("treatmentId") REFERENCES "DfdaTreatment"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaTreatmentSideEffect" ADD CONSTRAINT "DfdaTreatmentSideEffect_sideEffectId_fkey" FOREIGN KEY ("sideEffectId") REFERENCES "DfdaSideEffect"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaConditionCause" ADD CONSTRAINT "DfdaConditionCause_conditionId_fkey" FOREIGN KEY ("conditionId") REFERENCES "DfdaCondition"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaConditionCause" ADD CONSTRAINT "DfdaConditionCause_causeId_fkey" FOREIGN KEY ("causeId") REFERENCES "DfdaCause"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserConditionReport" ADD CONSTRAINT "DfdaUserConditionReport_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserConditionReport" ADD CONSTRAINT "DfdaUserConditionReport_conditionId_fkey" FOREIGN KEY ("conditionId") REFERENCES "DfdaCondition"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserSymptomReport" ADD CONSTRAINT "DfdaUserSymptomReport_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserSymptomReport" ADD CONSTRAINT "DfdaUserSymptomReport_symptomId_fkey" FOREIGN KEY ("symptomId") REFERENCES "DfdaSymptom"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserSymptomReport" ADD CONSTRAINT "DfdaUserSymptomReport_conditionId_fkey" FOREIGN KEY ("conditionId") REFERENCES "DfdaCondition"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserTreatmentReport" ADD CONSTRAINT "DfdaUserTreatmentReport_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserTreatmentReport" ADD CONSTRAINT "DfdaUserTreatmentReport_treatmentId_fkey" FOREIGN KEY ("treatmentId") REFERENCES "DfdaTreatment"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserTreatmentReport" ADD CONSTRAINT "DfdaUserTreatmentReport_conditionId_fkey" FOREIGN KEY ("conditionId") REFERENCES "DfdaCondition"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserSideEffectReport" ADD CONSTRAINT "DfdaUserSideEffectReport_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserSideEffectReport" ADD CONSTRAINT "DfdaUserSideEffectReport_sideEffectId_fkey" FOREIGN KEY ("sideEffectId") REFERENCES "DfdaSideEffect"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DfdaUserSideEffectReport" ADD CONSTRAINT "DfdaUserSideEffectReport_treatmentId_fkey" FOREIGN KEY ("treatmentId") REFERENCES "DfdaTreatment"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index b4530efa..e8d66e48 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -146,6 +146,10 @@ model User { userTaskAttachment UserTaskAttachment[] person Person? personId String? + conditionReports DfdaUserConditionReport[] + symptomReports DfdaUserSymptomReport[] + treatmentReports DfdaUserTreatmentReport[] + sideEffectReports DfdaUserSideEffectReport[] } model Education { @@ -1178,3 +1182,219 @@ enum DrugClassification { SCHEDULE_V UNSCHEDULED } + +model DfdaCondition { + id Int @id @default(autoincrement()) + name String @unique + description String? @unique + content String? + featuredImage String? + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + numberOfTreatments Int + numberOfSymptoms Int? + numberOfCauses Int + conditionSymptoms DfdaConditionSymptom[] + conditionTreatments DfdaConditionTreatment[] + conditionCauses DfdaConditionCause[] + userReports DfdaUserConditionReport[] + symptomReports DfdaUserSymptomReport[] + treatmentReports DfdaUserTreatmentReport[] +} + +model DfdaSymptom { + id Int @id @default(autoincrement()) + name String @unique + description String? @unique + content String? + featuredImage String? + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + numberOfConditions Int + conditionSymptoms DfdaConditionSymptom[] + userReports DfdaUserSymptomReport[] +} + +model DfdaTreatment { + id Int @id @default(autoincrement()) + name String @unique + description String? @unique + content String? + featuredImage String? + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + numberOfConditions Int? + numberOfSideEffects Int + conditionTreatments DfdaConditionTreatment[] + treatmentSideEffects DfdaTreatmentSideEffect[] + userReports DfdaUserTreatmentReport[] + sideEffectReports DfdaUserSideEffectReport[] +} + +model DfdaSideEffect { + id Int @id @default(autoincrement()) + name String @unique + description String? @unique + content String? + featuredImage String? + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + numberOfTreatments Int + treatmentSideEffects DfdaTreatmentSideEffect[] + userReports DfdaUserSideEffectReport[] +} + +model DfdaCause { + id Int @id @default(autoincrement()) + name String @unique + description String? @unique + content String? + featuredImage String? + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + numberOfConditions Int + conditionCauses DfdaConditionCause[] +} + +model DfdaConditionSymptom { + id Int @id @default(autoincrement()) + condition DfdaCondition @relation(fields: [conditionId], references: [id]) + conditionId Int + symptom DfdaSymptom @relation(fields: [symptomId], references: [id]) + symptomId Int + votes Int + extreme Int? + severe Int? + moderate Int? + mild Int? + minimal Int? + noSymptoms Int? + updatedAt DateTime @updatedAt + deletedAt DateTime? + createdAt DateTime @default(now()) + + @@unique([conditionId, symptomId]) +} + +model DfdaConditionTreatment { + id Int @id @default(autoincrement()) + condition DfdaCondition @relation(fields: [conditionId], references: [id]) + conditionId Int + treatment DfdaTreatment @relation(fields: [treatmentId], references: [id]) + treatmentId Int + majorImprovement Int @default(0) + moderateImprovement Int @default(0) + noEffect Int @default(0) + worse Int @default(0) + muchWorse Int @default(0) + popularity Int @default(0) + averageEffect Int @default(0) + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + + @@unique([treatmentId, conditionId]) +} + +model DfdaTreatmentSideEffect { + id Int @id @default(autoincrement()) + treatment DfdaTreatment @relation(fields: [treatmentId], references: [id]) + treatmentId Int + sideEffect DfdaSideEffect @relation(fields: [sideEffectId], references: [id]) + sideEffectId Int + votesPercent Int + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + + @@unique([treatmentId, sideEffectId]) +} + +model DfdaConditionCause { + id Int @id @default(autoincrement()) + condition DfdaCondition @relation(fields: [conditionId], references: [id]) + conditionId Int + cause DfdaCause @relation(fields: [causeId], references: [id]) + causeId Int + votesPercent Int + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + + @@unique([causeId, conditionId]) +} + +model DfdaUserConditionReport { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId String + condition DfdaCondition @relation(fields: [conditionId], references: [id]) + conditionId Int + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + severity Severity +} + +model DfdaUserSymptomReport { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId String + symptom DfdaSymptom @relation(fields: [symptomId], references: [id]) + symptomId Int + condition DfdaCondition? @relation(fields: [conditionId], references: [id]) + conditionId Int? + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + severity Severity +} + +model DfdaUserTreatmentReport { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId String + treatment DfdaTreatment @relation(fields: [treatmentId], references: [id]) + treatmentId Int + condition DfdaCondition? @relation(fields: [conditionId], references: [id]) + conditionId Int? + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + effectiveness Effectiveness +} + +model DfdaUserSideEffectReport { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId String + sideEffect DfdaSideEffect @relation(fields: [sideEffectId], references: [id]) + sideEffectId Int + treatment DfdaTreatment? @relation(fields: [treatmentId], references: [id]) + treatmentId Int? + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + deletedAt DateTime? + severity Severity +} + +enum Severity { + MINIMAL + MILD + MODERATE + SEVERE + EXTREME +} + +enum Effectiveness { + MUCH_WORSE + WORSE + NO_EFFECT + MODERATE_IMPROVEMENT + MAJOR_IMPROVEMENT +}