Skip to content

Commit

Permalink
add unlockedContract resolvr
Browse files Browse the repository at this point in the history
  • Loading branch information
pearl-truss committed Jul 2, 2024
1 parent ddac8e6 commit 8dcd93c
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 18 deletions.
2 changes: 2 additions & 0 deletions services/app-api/src/resolvers/configureResolvers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import { unlockRate } from './rate/unlockRate'
import { submitRate } from './rate/submitRate'
import { updateDraftContractRates } from './contract/updateDraftContractRates'
import { contractResolver } from './contract/contractResolver'
import { unlockedContractResolver } from './contract/unlockedContractResolver'
import { contractRevisionResolver } from './contract/contractRevisionResolver'
import { fetchContractResolver } from './contract/fetchContract'
import { submitContract } from './contract/submitContract'
Expand Down Expand Up @@ -159,6 +160,7 @@ export function configureResolvers(
Rate: rateResolver,
RateRevision: rateRevisionResolver,
Contract: contractResolver(),
UnlockedContract: unlockedContractResolver(),
ContractRevision: contractRevisionResolver(store),
GenericDocument: genericDocumentResolver(s3Client),
Document: questionResponseDocumentResolver(s3Client),
Expand Down
103 changes: 103 additions & 0 deletions services/app-api/src/resolvers/contract/unlockedContractResolver.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
import statePrograms from '../../../../app-web/src/common-code/data/statePrograms.json'
import type { Resolvers, SubmissionReason } from '../../gen/gqlServer'
import { GraphQLError } from 'graphql'
import type {
ContractPackageSubmissionWithCauseType,
RateRevisionType,
} from '../../domain-models'

export function unlockedContractResolver(): Resolvers['UnlockedContract'] {
return {
initiallySubmittedAt(parent) {
if (parent.packageSubmissions.length > 0) {
const firstSubmission =
parent.packageSubmissions[
parent.packageSubmissions.length - 1
]
return firstSubmission.submitInfo.updatedAt
}

return null
},
state(parent) {
const packageState = parent.stateCode
const state = statePrograms.states.find(
(st) => st.code === packageState
)

if (state === undefined) {
const errMessage =
'State not found in database: ' + packageState
throw new GraphQLError(errMessage, {
extensions: {
code: 'INTERNAL_SERVER_ERROR',
cause: 'DB_ERROR',
},
})
}
return state
},
packageSubmissions(parent) {
const gqlSubs: ContractPackageSubmissionWithCauseType[] = []
for (let i = 0; i < parent.packageSubmissions.length; i++) {
const thisSub = parent.packageSubmissions[i]
let prevSub = undefined
if (i < parent.packageSubmissions.length - 1) {
prevSub = parent.packageSubmissions[i + 1]
}

// determine the cause for this submission
let cause: SubmissionReason = 'CONTRACT_SUBMISSION'

if (
!thisSub.submittedRevisions.find(
(r) => r.id === thisSub.contractRevision.id
)
) {
// not a contract submission, this contract wasn't in the submitted bits
const connectedRateRevisionIDs = thisSub.rateRevisions.map(
(r) => r.id
)
const submittedRate = thisSub.submittedRevisions.find((r) =>
connectedRateRevisionIDs.includes(r.id)
)

if (!submittedRate) {
cause = 'RATE_UNLINK'
} else {
const thisSubmittedRate =
submittedRate as RateRevisionType
if (!prevSub) {
throw new Error(
'Programming Error: a non-contract submission must have a previous contract submission'
)
}
const previousRateRevisionIDs =
prevSub.rateRevisions.map((r) => r.rateID)
if (
previousRateRevisionIDs.includes(
thisSubmittedRate.rateID
)
) {
cause = 'RATE_SUBMISSION'
} else {
cause = 'RATE_LINK'
}
}
}

const gqlSub: ContractPackageSubmissionWithCauseType = {
cause,
submitInfo: thisSub.submitInfo,
submittedRevisions: thisSub.submittedRevisions,
contractRevision: thisSub.contractRevision,
rateRevisions: thisSub.rateRevisions,
}

gqlSubs.push(gqlSub)
}

return gqlSubs
},
}
}
19 changes: 1 addition & 18 deletions services/app-graphql/src/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -1519,23 +1519,6 @@ type ContractPackageSubmission {
rateRevisions: [RateRevision!]!
}

"""
ContractPackageSubmission is a snapshot of a contract and all its related rates in time
a ContractPackageSubmission can be created by the user submitting a contract or a related rate
"""
type UnlockedContractPackageSubmission {
"cause is a hint as to why this submission was created"
cause: SubmissionReason
"submitInfo provides the submission reason/date/by for this package submission"
submitInfo: UpdateInformation!
"submittedRevisions is a list of contract and/or rate revisions that were submitted to create this package submission"
submittedRevisions: [SubmittableRevision!]!
"contractRevision is the contract revision current at the time of this package submission"
contractRevision: ContractRevision!
"rateRevisions are the linked rate revisions current at the time of this package submission"
rateRevisions: [RateRevision!]!
}

"""
Contact is a single contract submission, holding all the form data for a single contract
and associated with zero or more Rates
Expand Down Expand Up @@ -1623,7 +1606,7 @@ type UnlockedContract {
a DRAFT Contract will have no packageSubmissions. Returned in _ascending_ order. Most recent
submission is in the first position in the array.
"""
packageSubmissions: [UnlockedContractPackageSubmission!]!
packageSubmissions: [ContractPackageSubmission!]!
}

type RateEdge {
Expand Down

0 comments on commit 8dcd93c

Please sign in to comment.