Skip to content

Commit

Permalink
MCR-4450: Follow up question name change to contractQuestion (#2807)
Browse files Browse the repository at this point in the history
* Change question to contractQuestion everywhere. Remove indexQuestions query.

* set up app for test data

* Some more typename changes

* Create fetchContractWithQuestions query helper.
  • Loading branch information
JasonLin0991 authored Oct 7, 2024
1 parent af44b1f commit 6e5db57
Show file tree
Hide file tree
Showing 57 changed files with 503 additions and 1,065 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
BEGIN;

ALTER TABLE "Question" RENAME TO "ContractQuestion";

ALTER TABLE "QuestionDocument" RENAME TO "ContractQuestionDocument";

ALTER TABLE "QuestionResponse" RENAME TO "ContractQuestionResponse";

ALTER TABLE "QuestionResponseDocument" RENAME TO "ContractQuestionResponseDocument";

ALTER TABLE "ContractQuestionDocument" RENAME CONSTRAINT "QuestionDocument_questionID_fkey" TO "ContractQuestionDocument_questionID_fkey";
ALTER TABLE "ContractQuestionResponse" RENAME CONSTRAINT "QuestionResponse_questionID_fkey" TO "ContractQuestionResponse_questionID_fkey";
ALTER TABLE "ContractQuestionResponseDocument" RENAME CONSTRAINT "QuestionResponseDocument_responseID_fkey" TO "ContractQuestionResponseDocument_responseID_fkey";

ALTER TABLE "ContractQuestion" RENAME CONSTRAINT "Question_contractID_fkey" TO "ContractQuestion_contractID_fkey";

COMMIT;
66 changes: 33 additions & 33 deletions services/app-api/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ model ContractTable {
state State @relation(fields: [stateCode], references: [stateCode])
stateNumber Int
questions Question[]
questions ContractQuestion[]
draftRates DraftRateJoinTable[]
Expand Down Expand Up @@ -302,22 +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")
questions Question[]
stateAssignments State[] @relation("StateToAssignedCMSUser")
questions ContractQuestion[]
rateQuestions RateQuestion[]
responses QuestionResponse[]
responses ContractQuestionResponse[]
rateResponses RateQuestionResponse[]
audits UserAudit[]
updatedByAuditEntries UserAudit[] @relation("UpdatedBy")
updatedByAuditEntries UserAudit[] @relation("UpdatedBy")
updateInfos UpdateInfoTable[]
}

Expand All @@ -334,48 +334,48 @@ model UserAudit {
priorValue Json?
}

model Question {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
model ContractQuestion {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
contractID String
contract ContractTable @relation(fields: [contractID], references: [id])
addedBy User @relation(fields: [addedByUserID], references: [id])
contract ContractTable @relation(fields: [contractID], references: [id])
addedBy User @relation(fields: [addedByUserID], references: [id])
addedByUserID String
division Division
documents QuestionDocument[]
responses QuestionResponse[]
documents ContractQuestionDocument[]
responses ContractQuestionResponse[]
}

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

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

model QuestionResponse {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
model ContractQuestionResponse {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
questionID String
question Question @relation(fields: [questionID], references: [id])
question ContractQuestion @relation(fields: [questionID], references: [id])
addedByUserID String
addedBy User @relation(fields: [addedByUserID], references: [id])
documents QuestionResponseDocument[]
addedBy User @relation(fields: [addedByUserID], references: [id])
documents ContractQuestionResponseDocument[]
}

model RateQuestion {
Expand Down
59 changes: 32 additions & 27 deletions services/app-api/src/domain-models/QuestionsType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,36 +18,36 @@ const commonQuestionSchema = z.object({
responses: z.array(questionResponseType),
})

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

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

const questionEdge = z.object({
node: question,
const contractQuestionEdge = z.object({
node: contractQuestion,
})

const rateQuestionEdge = z.object({
node: rateQuestion,
})

const questionList = z.object({
const contractQuestionList = z.object({
totalCount: z.number(),
edges: z.array(questionEdge),
edges: z.array(contractQuestionEdge),
})

const rateQuestionList = z.object({
totalCount: z.number(),
edges: z.array(rateQuestionEdge),
})

const indexQuestionsPayload = z.object({
DMCOQuestions: questionList,
DMCPQuestions: questionList,
OACTQuestions: questionList,
const indexContractQuestionsPayload = z.object({
DMCOQuestions: contractQuestionList,
DMCPQuestions: contractQuestionList,
OACTQuestions: contractQuestionList,
})

const indexRateQuestionsPayload = z.object({
Expand All @@ -56,11 +56,11 @@ const indexRateQuestionsPayload = z.object({
OACTQuestions: rateQuestionList,
})

const createQuestionPayload = z.object({
question: question,
const createContractQuestionPayload = z.object({
question: contractQuestion,
})

const createQuestionInput = z.object({
const createContractQuestionInput = z.object({
contractID: z.string().uuid(),
documents: z.array(document),
})
Expand All @@ -70,43 +70,48 @@ const createRateQuestionInput = z.object({
documents: z.array(document),
})

type CreateQuestionPayload = z.infer<typeof createQuestionPayload>
type CreateContractQuestionPayload = z.infer<
typeof createContractQuestionPayload
>

type CreateQuestionInput = z.infer<typeof createQuestionInput>
type CreateContractQuestionInput = z.infer<typeof createContractQuestionInput>

type IndexQuestionsPayload = z.infer<typeof indexQuestionsPayload>
type IndexContractQuestionsPayload = z.infer<
typeof indexContractQuestionsPayload
>

type Question = z.infer<typeof question>
type ContractQuestionType = z.infer<typeof contractQuestion>

type RateQuestionType = z.infer<typeof rateQuestion>

type CreateRateQuestionInputType = z.infer<typeof createRateQuestionInput>

type QuestionList = z.infer<typeof questionList>
type ContractQuestionList = z.infer<typeof contractQuestionList>

type Document = z.infer<typeof document>

type IndexRateQuestionsPayload = z.infer<typeof indexRateQuestionsPayload>

export type {
IndexQuestionsPayload,
CreateQuestionPayload,
CreateQuestionInput,
Question,
IndexContractQuestionsPayload,
CreateContractQuestionPayload,
CreateContractQuestionInput,
ContractQuestionList,
ContractQuestionType,
Document,
QuestionList,
RateQuestionType,
CreateRateQuestionInputType,
IndexRateQuestionsPayload,
}

export {
indexQuestionsPayload,
createQuestionInput,
createQuestionPayload,
question,
indexContractQuestionsPayload,
createContractQuestionInput,
createContractQuestionPayload,
contractQuestion,
document,
questionList,
contractQuestionList,
rateQuestion,
createRateQuestionInput,
indexRateQuestionsPayload,
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ import {
} from './packageSubmissions'
import { contractRevisionSchema, rateRevisionSchema } from './revisionTypes'
import { statusSchema } from './statusType'
import { indexQuestionsPayload } from '../QuestionsType'
import {
indexContractQuestionsPayload,
indexRateQuestionsPayload,
} from '../QuestionsType'
import { updateInfoSchema } from './updateInfoType'

// Contract represents the contract specific information in a submission package
Expand All @@ -27,7 +30,7 @@ const contractWithoutDraftRatesSchema = z.object({

packageSubmissions: z.array(contractPackageSubmissionSchema),

questions: indexQuestionsPayload.optional(),
questions: indexContractQuestionsPayload.optional(),
})

type ContractWithoutDraftRatesType = z.infer<
Expand All @@ -49,6 +52,8 @@ const rateWithoutDraftContractsSchema = z.object({
revisions: z.array(rateRevisionSchema),

packageSubmissions: z.array(ratePackageSubmissionSchema),

questions: indexRateQuestionsPayload.optional(),
})

type RateWithoutDraftContractsType = z.infer<
Expand Down
10 changes: 5 additions & 5 deletions services/app-api/src/domain-models/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,12 @@ export type {
} from './HealthPlanPackageType'

export type {
IndexQuestionsPayload,
CreateQuestionPayload,
CreateQuestionInput,
Question,
IndexContractQuestionsPayload,
CreateContractQuestionPayload,
CreateContractQuestionInput,
ContractQuestionType,
Document,
QuestionList,
ContractQuestionList,
RateQuestionType,
CreateRateQuestionInputType,
IndexRateQuestionsPayload,
Expand Down
14 changes: 7 additions & 7 deletions services/app-api/src/emailer/emailer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import type {
import type {
UpdateInfoType,
ProgramType,
Question,
ContractQuestionType,
ContractRevisionType,
UnlockedContractType,
} from '../domain-models'
Expand Down Expand Up @@ -124,27 +124,27 @@ type Emailer = {
contract: ContractRevisionType,
submitterEmails: string[],
statePrograms: ProgramType[],
question: Question
question: ContractQuestionType
) => Promise<void | Error>
sendQuestionsCMSEmail: (
contract: ContractRevisionType,
stateAnalystsEmails: StateAnalystsEmails,
statePrograms: ProgramType[],
questions: Question[]
questions: ContractQuestionType[]
) => Promise<void | Error>
sendQuestionResponseCMSEmail: (
contractRevision: ContractRevisionType,
statePrograms: ProgramType[],
stateAnalystsEmails: StateAnalystsEmails,
currentQuestion: Question,
allContractQuestions: Question[]
currentQuestion: ContractQuestionType,
allContractQuestions: ContractQuestionType[]
) => Promise<void | Error>
sendQuestionResponseStateEmail: (
contractRevision: ContractRevisionType,
statePrograms: ProgramType[],
submitterEmails: string[],
currentQuestion: Question,
allContractQuestions: Question[]
currentQuestion: ContractQuestionType,
allContractQuestions: ContractQuestionType[]
) => Promise<void | Error>
}
const localEmailerLogger = (emailData: EmailData) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export const resubmitPackageCMSEmail = async (
resubmittedBy: updateInfo.updatedBy.email,
resubmittedOn: formatCalendarDate(updateInfo.updatedAt),
resubmissionReason: updateInfo.updatedReason,
shouldIncludeRates: pkg.submissionType === 'CONTRACT_AND_RATES',
shouldIncludeRates: isContractAndRates,
rateInfos:
isContractAndRates &&
pkg.rateInfos.map((rate) => ({
Expand Down
12 changes: 8 additions & 4 deletions services/app-api/src/emailer/emails/sendQuestionCMSEmail.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ import {
mockMNState,
mockQuestionAndResponses,
} from '../../testHelpers/emailerHelpers'
import type { CMSUserType, StateType, Question } from '../../domain-models'
import type {
CMSUserType,
StateType,
ContractQuestionType,
} from '../../domain-models'
import { packageName } from '../../common-code/healthPlanFormDataType'
import { sendQuestionCMSEmail } from './index'
import { getTestStateAnalystsEmails } from '../../testHelpers/parameterStoreHelpers'
Expand All @@ -27,7 +31,7 @@ const cmsUser: CMSUserType = {
stateAssignments: [flState],
}

const questions: Question[] = [
const questions: ContractQuestionType[] = [
mockQuestionAndResponses({
id: 'test-question-id-1',
addedBy: cmsUser,
Expand Down Expand Up @@ -75,7 +79,7 @@ test('to addresses list includes state analyst and OACT group emails when an OAC
...cmsUser,
divisionAssignment: 'OACT',
}
const questionsFromOACT: Question[] = [
const questionsFromOACT: ContractQuestionType[] = [
{
...questions[0],
addedBy: oactUser,
Expand Down Expand Up @@ -110,7 +114,7 @@ test('to addresses list includes state analyst and DMCP group emails when a DMCP
...cmsUser,
divisionAssignment: 'DMCP',
}
const questionsFromDMCP: Question[] = [
const questionsFromDMCP: ContractQuestionType[] = [
{
...questions[0],
addedBy: dmcpUser,
Expand Down
Loading

0 comments on commit 6e5db57

Please sign in to comment.