Skip to content

Commit

Permalink
MCR-4447: Q&A by rates database tables, domain types, and feature flag (
Browse files Browse the repository at this point in the history
#2794)

* Q&A by rates prisma update and migration.

* RateQuestion domain type and zod schema

* Add new flag to featureFlags
  • Loading branch information
JasonLin0991 authored Oct 1, 2024
1 parent dce091d commit 29d33ec
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
BEGIN;

-- CreateTable
CREATE TABLE "RateQuestion" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"rateID" TEXT NOT NULL,
"addedByUserID" TEXT NOT NULL,
"division" "Division" NOT NULL,

CONSTRAINT "RateQuestion_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "RateQuestionResponse" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"questionID" TEXT NOT NULL,
"addedByUserID" TEXT NOT NULL,

CONSTRAINT "RateQuestionResponse_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "RateQuestionDocument" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"name" TEXT NOT NULL,
"s3URL" TEXT NOT NULL,
"questionID" TEXT NOT NULL,

CONSTRAINT "RateQuestionDocument_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "RateQuestionResponseDocument" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"name" TEXT NOT NULL,
"s3URL" TEXT NOT NULL,
"responseID" TEXT NOT NULL,

CONSTRAINT "RateQuestionResponseDocument_pkey" PRIMARY KEY ("id")
);

-- AddForeignKey
ALTER TABLE "RateQuestion" ADD CONSTRAINT "RateQuestion_rateID_fkey" FOREIGN KEY ("rateID") REFERENCES "RateTable"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "RateQuestion" ADD CONSTRAINT "RateQuestion_addedByUserID_fkey" FOREIGN KEY ("addedByUserID") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "RateQuestionResponse" ADD CONSTRAINT "RateQuestionResponse_questionID_fkey" FOREIGN KEY ("questionID") REFERENCES "RateQuestion"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "RateQuestionResponse" ADD CONSTRAINT "RateQuestionResponse_addedByUserID_fkey" FOREIGN KEY ("addedByUserID") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "RateQuestionDocument" ADD CONSTRAINT "RateQuestionDocument_questionID_fkey" FOREIGN KEY ("questionID") REFERENCES "RateQuestion"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "RateQuestionResponseDocument" ADD CONSTRAINT "RateQuestionResponseDocument_responseID_fkey" FOREIGN KEY ("responseID") REFERENCES "RateQuestionResponse"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

COMMIT;
58 changes: 53 additions & 5 deletions services/app-api/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ model RateTable {
withdrawInfoID String?
withdrawInfo UpdateInfoTable? @relation("withdrawRateInfo", fields: [withdrawInfoID], references: [id])
questions RateQuestion[]
draftContracts DraftRateJoinTable[]
revisions RateRevisionTable[]
Expand Down Expand Up @@ -300,20 +302,22 @@ model StateProgram {
}

model User {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
givenName String
familyName String
email String
role Role
divisionAssignment Division?
stateCode String?
stateAssignments State[] @relation("StateToAssignedCMSUser")
stateAssignments State[] @relation("StateToAssignedCMSUser")
questions Question[]
rateQuestions RateQuestion[]
responses QuestionResponse[]
rateResponses RateQuestionResponse[]
audits UserAudit[]
updatedByAuditEntries UserAudit[] @relation("UpdatedBy")
updatedByAuditEntries UserAudit[] @relation("UpdatedBy")
updateInfos UpdateInfoTable[]
}

Expand Down Expand Up @@ -374,6 +378,50 @@ model QuestionResponse {
documents QuestionResponseDocument[]
}

model RateQuestion {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
rateID String
rate RateTable @relation(fields: [rateID], references: [id])
addedBy User @relation(fields: [addedByUserID], references: [id])
addedByUserID String
division Division
documents RateQuestionDocument[]
responses RateQuestionResponse[]
}

model RateQuestionResponse {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
questionID String
question RateQuestion @relation(fields: [questionID], references: [id])
addedByUserID String
addedBy User @relation(fields: [addedByUserID], references: [id])
documents RateQuestionResponseDocument[]
}

model RateQuestionDocument {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
name String
s3URL String
questionID String
question RateQuestion @relation(fields: [questionID], references: [id])
}

model RateQuestionResponseDocument {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
name String
s3URL String
responseID String
response RateQuestionResponse @relation(fields: [responseID], references: [id])
}

enum Division {
DMCO
DMCP
Expand Down
15 changes: 13 additions & 2 deletions services/app-api/src/domain-models/QuestionsType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,23 @@ const document = z.object({
downloadURL: z.string().optional(),
})

const question = z.object({
const commonQuestionSchema = z.object({
id: z.string().uuid(),
contractID: z.string().uuid(),
createdAt: z.date(),
addedBy: cmsUserSchema,
division: divisionType, // DMCO, DMCP, OACT
documents: z.array(document),
responses: z.array(questionResponseType),
})

const question = commonQuestionSchema.extend({
contractID: z.string().uuid(),
})

const rateQuestion = commonQuestionSchema.extend({
rateID: z.string().uuid(),
})

const questionEdge = z.object({
node: question,
})
Expand Down Expand Up @@ -51,6 +58,8 @@ type IndexQuestionsPayload = z.infer<typeof indexQuestionsPayload>

type Question = z.infer<typeof question>

type RateQuestion = z.infer<typeof rateQuestion>

type QuestionList = z.infer<typeof questionList>

type Document = z.infer<typeof document>
Expand All @@ -62,6 +71,7 @@ export type {
Question,
Document,
QuestionList,
RateQuestion,
}

export {
Expand All @@ -71,4 +81,5 @@ export {
question,
document,
questionList,
rateQuestion,
}
1 change: 1 addition & 0 deletions services/app-api/src/domain-models/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ export type {
Question,
Document,
QuestionList,
RateQuestion,
} from './QuestionsType'

export type {
Expand Down
5 changes: 4 additions & 1 deletion services/app-web/src/common-code/featureFlags/flags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,11 @@ const featureFlags = {
flag: 'read-write-state-assignments',
defaultValue: false
},
QA_BY_RATES: {
flag: 'qa-by-rates',
defaultValue: false
},
// PERMANENT FLAGS

/**
Enables the modal that alerts the user to an expiring session
*/
Expand Down

0 comments on commit 29d33ec

Please sign in to comment.