Skip to content

Commit ab66efc

Browse files
authored
Post userDetails to updateAnswers endpoint; Some clean-up (#702)
1 parent 6333606 commit ab66efc

File tree

9 files changed

+55
-70
lines changed

9 files changed

+55
-70
lines changed

app/controllers/baseCollectionController.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import { NextFunction, Response } from 'express'
44
import FormWizard from 'hmpo-form-wizard'
55
import BaseController from './baseController'
66
import { createAnswerDTOs, flattenAnswers } from './saveAndContinue.utils'
7-
import StrengthsBasedNeedsAssessmentsApiService, { SessionData } from '../../server/services/strengthsBasedNeedsService'
7+
import StrengthsBasedNeedsAssessmentsApiService, {
8+
SessionData,
9+
userDetailsFromSession,
10+
} from '../../server/services/strengthsBasedNeedsService'
811
import { HandoverSubject } from '../../server/services/arnsHandoverService'
912
import { compileConditionalFields, fieldsById, withPlaceholdersFrom, withValuesFrom } from '../utils/field.utils'
1013
import { FieldType } from '../../server/@types/hmpo-form-wizard/enums'
@@ -131,8 +134,6 @@ abstract class BaseCollectionController extends BaseController {
131134
}
132135
}
133136

134-
res.locals.oasysEquivalent = assessment.oasysEquivalent
135-
136137
const withFieldIds = (others: FormWizard.Fields, [key, field]: [string, FormWizard.Field]) => ({
137138
...others,
138139
[key]: { ...field, id: key },
@@ -258,7 +259,11 @@ abstract class BaseCollectionController extends BaseController {
258259
const { assessmentId } = req.session.sessionData as SessionData
259260
const answersToAdd = this.buildRequestBody(req, res)
260261

261-
await this.apiService.updateAnswers(assessmentId, { answersToAdd, answersToRemove: [] })
262+
await this.apiService.updateAnswers(assessmentId, {
263+
answersToAdd,
264+
answersToRemove: [],
265+
userDetails: userDetailsFromSession(req.session.sessionData as SessionData),
266+
})
262267
}
263268

264269
async successHandler(req: FormWizard.Request, res: Response, next: NextFunction) {

app/controllers/saveAndContinue.utils.ts

+5
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ export const buildRequestBody = (
9090
sectionFields.includes(fieldCode) && !relevantFields.some(field => field.field.code === fieldCode),
9191
)
9292
: [],
93+
userDetails: {
94+
id: 'user-id',
95+
name: 'User Name',
96+
type: 'SAN',
97+
},
9398
}
9499
}
95100

app/controllers/saveAndContinueController.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import { NextFunction, Response } from 'express'
22
import FormWizard from 'hmpo-form-wizard'
33
import BaseController from './baseController'
44
import { buildRequestBody, flattenAnswers } from './saveAndContinue.utils'
5-
import StrengthsBasedNeedsAssessmentsApiService, { SessionData } from '../../server/services/strengthsBasedNeedsService'
5+
import StrengthsBasedNeedsAssessmentsApiService, {
6+
SessionData,
7+
userDetailsFromSession,
8+
} from '../../server/services/strengthsBasedNeedsService'
69
import { HandoverSubject } from '../../server/services/arnsHandoverService'
710
import {
811
compileConditionalFields,
@@ -45,7 +48,6 @@ class SaveAndContinueController extends BaseController {
4548
: await this.apiService.fetchAssessment(sessionData.assessmentId, sessionData.assessmentVersion)
4649

4750
req.form.persistedAnswers = flattenAnswers(assessment.assessment)
48-
res.locals.oasysEquivalent = assessment.oasysEquivalent
4951
res.locals.assessmentVersion = assessment.metaData.versionNumber
5052

5153
const withFieldIds = (others: FormWizard.Fields, [key, field]: [string, FormWizard.Field]) => ({
@@ -233,7 +235,11 @@ class SaveAndContinueController extends BaseController {
233235
}
234236
res.locals.values = req.form.values
235237

236-
await this.apiService.updateAnswers(assessmentId, { answersToAdd, answersToRemove })
238+
await this.apiService.updateAnswers(assessmentId, {
239+
answersToAdd,
240+
answersToRemove,
241+
userDetails: userDetailsFromSession(req.session.sessionData as SessionData),
242+
})
237243
}
238244

239245
async successHandler(req: FormWizard.Request, res: Response, next: NextFunction) {

app/controllers/startController.ts

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { Request, Response, NextFunction } from 'express'
22
import StrengthsBasedNeedsAssessmentsApiService, {
33
AssessmentResponse,
4+
SessionData,
5+
userDetailsFromSession,
46
} from '../../server/services/strengthsBasedNeedsService'
5-
import ArnsHandoverService, { HandoverContextData } from '../../server/services/arnsHandoverService'
7+
import ArnsHandoverService, { HandoverSubject } from '../../server/services/arnsHandoverService'
68
import { createAnswerDto, isReadOnly } from './saveAndContinue.utils'
79
import thinkingBehavioursFields from '../form/v1_0/fields/thinking-behaviours-attitudes'
810
import { stepUrls } from '../form/v1_0/steps/thinking-behaviours-attitudes'
@@ -22,13 +24,15 @@ const startController = async (req: Request, res: Response, next: NextFunction)
2224
const assessment = await apiService.fetchAssessment(contextData.assessmentContext.assessmentId)
2325
const version = assessment.metaData.formVersion.replace(/\./g, '/')
2426

25-
if (!isReadOnly(contextData.principal)) await setSexuallyMotivatedOffenceHistory(assessment, contextData)
26-
2727
req.session.sessionData = {
2828
...contextData.assessmentContext,
2929
user: contextData.principal,
3030
}
3131
req.session.subjectDetails = contextData.subject
32+
33+
if (!isReadOnly(contextData.principal))
34+
await setSexuallyMotivatedOffenceHistory(assessment, contextData.subject, req.session.sessionData as SessionData)
35+
3236
req.session.save(error => {
3337
if (error) {
3438
return next(error)
@@ -43,9 +47,13 @@ const startController = async (req: Request, res: Response, next: NextFunction)
4347
}
4448
}
4549

46-
const setSexuallyMotivatedOffenceHistory = async (assessment: AssessmentResponse, contextData: HandoverContextData) => {
50+
const setSexuallyMotivatedOffenceHistory = async (
51+
assessment: AssessmentResponse,
52+
subject: HandoverSubject,
53+
session: SessionData,
54+
) => {
4755
const field = thinkingBehavioursFields.thinkingBehavioursAttitudesRiskSexualHarm
48-
const oasysAnswer = contextData.subject.sexuallyMotivatedOffenceHistory
56+
const oasysAnswer = subject.sexuallyMotivatedOffenceHistory
4957
const sanAnswer = assessment.assessment[field.code]?.value
5058
const sectionCompleteField = thinkingBehavioursFields.sectionComplete()
5159
const isUserSubmittedField = thinkingBehavioursFields.isUserSubmitted(stepUrls.thinkingBehavioursAttitudes)
@@ -59,6 +67,7 @@ const setSexuallyMotivatedOffenceHistory = async (assessment: AssessmentResponse
5967
[assessmentComplete.code]: createAnswerDto(assessmentComplete, 'NO'),
6068
},
6169
answersToRemove: [],
70+
userDetails: userDetailsFromSession(session),
6271
})
6372
}
6473
}

app/form/v1_0/config/templates.ts

-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@ export default {
22
analysisComplete: 'forms/summary/summary-analysis-complete',
33
analysisIncomplete: 'forms/summary/summary-analysis-incomplete',
44
drugUsage: 'forms/drug-usage',
5-
dataMapping: 'forms/summary/data-mapping',
65
printPreview: 'pages/print-preview',
76
}

app/form/v1_0/steps/index.ts

-12
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,6 @@ import { Section, SectionConfig } from '../config/sections'
1515
import templates from '../config/templates'
1616

1717
export const sectionConfigs: SectionConfig[] = [
18-
{
19-
section: {
20-
title: 'Data mapping',
21-
code: 'data-mapping',
22-
},
23-
steps: [
24-
{
25-
url: 'data-mapping',
26-
template: templates.dataMapping,
27-
},
28-
],
29-
},
3018
{
3119
section: {
3220
title: 'Print preview',

cypress/support/commands/api.ts

+5
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,11 @@ export const createAssessment = (data = null) => {
139139
auth: { bearer: apiToken },
140140
body: {
141141
answersToAdd: data.assessment,
142+
userDetails: {
143+
id: 'cypress',
144+
name: 'Cypress User',
145+
type: 'SAN',
146+
},
142147
},
143148
retryOnNetworkFailure: false,
144149
})

server/services/strengthsBasedNeedsService.ts

+13-24
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,10 @@
1-
import { UUID } from 'crypto'
21
import querystring from 'querystring'
32
import config from '../config'
43
import RestClient from '../data/restClient'
54
import getHmppsAuthClient from '../data/index'
65
import { FieldType } from '../@types/hmpo-form-wizard/enums'
76
import { HandoverPrincipal } from './arnsHandoverService'
87

9-
export interface CreateAssessmentRequest extends Record<string, unknown> {
10-
oasysAssessmentPk: string
11-
userDetails: {
12-
id: string
13-
name: string
14-
}
15-
}
16-
17-
export interface CreateAssessmentResponse {
18-
sanAssessmentId: UUID
19-
sanAssessmentVersion: number
20-
sentencePlanId?: UUID
21-
sentencePlanVersion?: number
22-
}
23-
248
export interface SessionData {
259
assessmentId: string
2610
assessmentVersion: number
@@ -63,19 +47,24 @@ export interface AssessmentResponse {
6347
metaData: AssessmentMetaData
6448
}
6549

66-
export interface OasysAssessmentResponse {
67-
sanAssessmentId: string
68-
sanAssessmentVersion: number
69-
sanAssessmentData: AssessmentResponse
70-
lastUpdatedTimestamp: string
71-
}
72-
7350
export interface UpdateAnswersDto extends Record<string, unknown> {
7451
answersToAdd: AnswerDTOs
7552
answersToRemove: string[]
76-
tags?: string[]
53+
userDetails: UserDetails
7754
}
7855

56+
interface UserDetails {
57+
id: string
58+
name: string
59+
type: string
60+
}
61+
62+
export const userDetailsFromSession = (session: SessionData): UserDetails => ({
63+
id: session.user.identifier,
64+
name: session.user.displayName,
65+
type: 'OASYS',
66+
})
67+
7968
export default class StrengthsBasedNeedsAssessmentsApiService {
8069
authClient
8170

server/views/forms/summary/data-mapping.njk

-21
This file was deleted.

0 commit comments

Comments
 (0)