Skip to content

Commit f498c4a

Browse files
authored
CDPS-1140: Military History (#23)
* CDPS-1140: Military History Remove bookingId from DTOs Add parentCode and parentDomain to ref data DTO * Address PR comments
1 parent b8099bd commit f498c4a

File tree

11 files changed

+49
-151
lines changed

11 files changed

+49
-151
lines changed

src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/common/client/PrisonApiClient.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import org.springframework.web.service.annotation.HttpExchange
88
import org.springframework.web.service.annotation.PostExchange
99
import org.springframework.web.service.annotation.PutExchange
1010
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.dto.UpdateBirthCountry
11-
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.CreateMilitaryRecord
11+
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.MilitaryRecordRequest
1212
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateBirthPlace
13-
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateMilitaryRecord
1413
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateNationality
1514
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateReligion
1615
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.response.MilitaryRecordPrisonDto
@@ -40,16 +39,17 @@ interface PrisonApiClient {
4039
@PathVariable offenderNo: String,
4140
): ResponseEntity<MilitaryRecordPrisonDto>
4241

43-
@PutExchange("/{offenderNo}/military-records")
42+
@PutExchange("/{offenderNo}/military-records/{militarySeq}")
4443
fun updateMilitaryRecord(
4544
@PathVariable offenderNo: String,
46-
@RequestBody updateMilitaryRecord: UpdateMilitaryRecord,
45+
@PathVariable militarySeq: Int,
46+
@RequestBody militaryRecordRequest: MilitaryRecordRequest,
4747
): ResponseEntity<Void>
4848

4949
@PostExchange("/{offenderNo}/military-records")
5050
fun createMilitaryRecord(
5151
@PathVariable offenderNo: String,
52-
@RequestBody createMilitaryRecord: CreateMilitaryRecord,
52+
@RequestBody militaryRecordRequest: MilitaryRecordRequest,
5353
): ResponseEntity<Void>
5454

5555
@PutExchange("/{offenderNo}/religion")

src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/common/client/request/CreateMilitaryRecord.kt src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/common/client/request/MilitaryRecordRequest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request
33
import io.swagger.v3.oas.annotations.media.Schema
44
import java.time.LocalDate
55

6-
@Schema(description = "Create a military record.")
7-
class CreateMilitaryRecord(
6+
@Schema(description = "Military record request object. Used to create or update a military record.")
7+
class MilitaryRecordRequest(
88
@Schema(
99
description = "Code identifying the war zone where the service took place.",
1010
example = "AFG",

src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/common/client/request/UpdateMilitaryRecord.kt

-97
This file was deleted.

src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/common/client/response/ReferenceDataCode.kt

+2
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@ data class ReferenceDataCode(
66
val description: String,
77
val activeFlag: String,
88
val listSeq: Int,
9+
val parentCode: String? = null,
10+
val parentDomain: String? = null,
911
)

src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/common/dto/ReferenceDataCodeDto.kt

+6
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,10 @@ data class ReferenceDataCodeDto(
3030
example = "true",
3131
)
3232
val isActive: Boolean,
33+
34+
@Schema(description = "Parent code for the reference data code", example = "EU")
35+
val parentCode: String? = null,
36+
37+
@Schema(description = "Parent domain for the reference data code", example = "REGION")
38+
val parentDomain: String? = null,
3339
)

src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/corepersonrecord/dto/response/MilitaryRecordDto.kt

-6
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,6 @@ import java.time.LocalDate
88
@JsonInclude(Include.NON_NULL)
99
@Schema(description = "DTO representing a military record with details about service in the UK Armed Forces.")
1010
data class MilitaryRecordDto(
11-
@Schema(
12-
description = "Booking ID of the prisoner.",
13-
example = "1234567",
14-
)
15-
val bookingId: Long,
16-
1711
@Schema(
1812
description = "Sequence number of the military record within the booking.",
1913
example = "1",

src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/corepersonrecord/resource/CorePersonRecordV1Resource.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ import org.springframework.web.bind.annotation.ResponseStatus
2525
import org.springframework.web.bind.annotation.RestController
2626
import org.springframework.web.multipart.MultipartFile
2727
import uk.gov.justice.digital.hmpps.personintegrationapi.common.annotation.ValidPrisonerNumber
28-
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.CreateMilitaryRecord
29-
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateMilitaryRecord
28+
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.MilitaryRecordRequest
3029
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateNationality
3130
import uk.gov.justice.digital.hmpps.personintegrationapi.common.dto.ReferenceDataCodeDto
3231
import uk.gov.justice.digital.hmpps.personintegrationapi.corepersonrecord.CorePersonRecordRoleConstants
@@ -205,7 +204,7 @@ class CorePersonRecordV1Resource(
205204
ApiResponse(
206205
responseCode = "200",
207206
description = "Military records found",
208-
content = [Content(array = ArraySchema(schema = Schema(implementation = ReferenceDataCodeDto::class)))],
207+
content = [Content(array = ArraySchema(schema = Schema(implementation = MilitaryRecordDto::class)))],
209208
),
210209
ApiResponse(
211210
responseCode = "401",
@@ -280,8 +279,9 @@ class CorePersonRecordV1Resource(
280279
@PreAuthorize("hasRole('${CorePersonRecordRoleConstants.CORE_PERSON_RECORD_READ_WRITE_ROLE}')")
281280
fun putMilitaryRecord(
282281
@RequestParam(required = true) @Valid @ValidPrisonerNumber prisonerNumber: String,
283-
@RequestBody(required = true) @Valid updateMilitaryRecord: UpdateMilitaryRecord,
284-
): ResponseEntity<Void> = corePersonRecordService.updateMilitaryRecord(prisonerNumber, updateMilitaryRecord)
282+
@RequestParam(required = true) militarySeq: Int,
283+
@RequestBody(required = true) @Valid militaryRecordRequest: MilitaryRecordRequest,
284+
): ResponseEntity<Void> = corePersonRecordService.updateMilitaryRecord(prisonerNumber, militarySeq, militaryRecordRequest)
285285

286286
@PostMapping("/military-records")
287287
@ResponseStatus(HttpStatus.CREATED)
@@ -329,8 +329,8 @@ class CorePersonRecordV1Resource(
329329
@PreAuthorize("hasRole('${CorePersonRecordRoleConstants.CORE_PERSON_RECORD_READ_WRITE_ROLE}')")
330330
fun postMilitaryRecord(
331331
@RequestParam(required = true) @Valid @ValidPrisonerNumber prisonerNumber: String,
332-
@RequestBody(required = true) @Valid createMilitaryRecord: CreateMilitaryRecord,
333-
): ResponseEntity<Void> = corePersonRecordService.createMilitaryRecord(prisonerNumber, createMilitaryRecord)
332+
@RequestBody(required = true) @Valid militaryRecordRequest: MilitaryRecordRequest,
333+
): ResponseEntity<Void> = corePersonRecordService.createMilitaryRecord(prisonerNumber, militaryRecordRequest)
334334

335335
@PutMapping("/nationality")
336336
@ResponseStatus(HttpStatus.NO_CONTENT)

src/main/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/corepersonrecord/service/CorePersonRecordService.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import org.springframework.stereotype.Service
55
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.PrisonApiClient
66
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.ReferenceDataClient
77
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.dto.UpdateBirthCountry
8-
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.CreateMilitaryRecord
8+
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.MilitaryRecordRequest
99
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateBirthPlace
10-
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateMilitaryRecord
1110
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateNationality
1211
import uk.gov.justice.digital.hmpps.personintegrationapi.common.dto.ReferenceDataCodeDto
1312
import uk.gov.justice.digital.hmpps.personintegrationapi.corepersonrecord.dto.response.MilitaryRecordDto
@@ -49,6 +48,8 @@ class CorePersonRecordService(
4948
it.description,
5049
it.listSeq,
5150
it.activeFlag == "Y",
51+
it.parentCode,
52+
it.parentDomain,
5253
)
5354
}
5455
return ResponseEntity.ok(mappedResponse)
@@ -66,7 +67,6 @@ class CorePersonRecordService(
6667

6768
val mappedResponse = response.body?.militaryRecords?.map {
6869
MilitaryRecordDto(
69-
bookingId = it.bookingId,
7070
militarySeq = it.militarySeq,
7171
warZoneCode = it.warZoneCode,
7272
warZoneDescription = it.warZoneDescription,
@@ -94,9 +94,9 @@ class CorePersonRecordService(
9494
}
9595
}
9696

97-
fun updateMilitaryRecord(prisonerNumber: String, updateMilitaryRecord: UpdateMilitaryRecord): ResponseEntity<Void> = prisonApiClient.updateMilitaryRecord(prisonerNumber, updateMilitaryRecord)
97+
fun updateMilitaryRecord(prisonerNumber: String, militarySeq: Int, militaryRecordRequest: MilitaryRecordRequest): ResponseEntity<Void> = prisonApiClient.updateMilitaryRecord(prisonerNumber, militarySeq, militaryRecordRequest)
9898

99-
fun createMilitaryRecord(prisonerNumber: String, createMilitaryRecord: CreateMilitaryRecord): ResponseEntity<Void> = prisonApiClient.createMilitaryRecord(prisonerNumber, createMilitaryRecord)
99+
fun createMilitaryRecord(prisonerNumber: String, militaryRecordRequest: MilitaryRecordRequest): ResponseEntity<Void> = prisonApiClient.createMilitaryRecord(prisonerNumber, militaryRecordRequest)
100100

101101
fun updateNationality(prisonerNumber: String, updateNationality: UpdateNationality): ResponseEntity<Void> = prisonApiClient.updateNationalityForWorkingName(prisonerNumber, updateNationality)
102102
}

src/test/kotlin/uk/gov/justice/digital/hmpps/personintegrationapi/corepersonrecord/resource/CorePersonRecordV1ResourceIntTest.kt

+9-14
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ import org.springframework.http.client.MultipartBodyBuilder
1010
import org.springframework.mock.web.MockMultipartFile
1111
import org.springframework.web.multipart.MultipartFile
1212
import org.springframework.web.reactive.function.BodyInserters
13-
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.CreateMilitaryRecord
14-
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateMilitaryRecord
13+
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.MilitaryRecordRequest
1514
import uk.gov.justice.digital.hmpps.personintegrationapi.common.client.request.UpdateNationality
1615
import uk.gov.justice.digital.hmpps.personintegrationapi.common.dto.ReferenceDataCodeDto
1716
import uk.gov.justice.digital.hmpps.personintegrationapi.corepersonrecord.CorePersonRecordRoleConstants
@@ -229,7 +228,6 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
229228
assertThat(response).isEqualTo(
230229
listOf(
231230
MilitaryRecordDto(
232-
bookingId = -1L,
233231
militarySeq = 1,
234232
warZoneCode = "WZ1",
235233
warZoneDescription = "War Zone One",
@@ -251,7 +249,6 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
251249
disciplinaryActionDescription = "Disciplinary Action One",
252250
),
253251
MilitaryRecordDto(
254-
bookingId = -1L,
255252
militarySeq = 2,
256253
warZoneCode = "WZ2",
257254
warZoneDescription = "War Zone Two",
@@ -280,13 +277,13 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
280277

281278
@DisplayName("PUT v1/core-person-record/military-records")
282279
@Nested
283-
inner class UpdateMilitaryRecords {
280+
inner class UpdateMilitaryRecord {
284281

285282
@Nested
286283
inner class Security {
287284
@Test
288285
fun `access forbidden when no authority`() {
289-
webTestClient.put().uri("/v1/core-person-record/military-records?prisonerNumber=$PRISONER_NUMBER")
286+
webTestClient.put().uri("/v1/core-person-record/military-records?prisonerNumber=$PRISONER_NUMBER&militarySeq=1")
290287
.contentType(MediaType.APPLICATION_JSON)
291288
.bodyValue(UPDATE_MILITARY_RECORD)
292289
.exchange()
@@ -295,7 +292,7 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
295292

296293
@Test
297294
fun `access forbidden with wrong role`() {
298-
webTestClient.put().uri("/v1/core-person-record/military-records?prisonerNumber=$PRISONER_NUMBER")
295+
webTestClient.put().uri("/v1/core-person-record/military-records?prisonerNumber=$PRISONER_NUMBER&militarySeq=1")
299296
.contentType(MediaType.APPLICATION_JSON)
300297
.headers(setAuthorisation(roles = listOf("ROLE_IS_WRONG")))
301298
.bodyValue(UPDATE_MILITARY_RECORD)
@@ -309,7 +306,7 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
309306

310307
@Test
311308
fun `update military record`() {
312-
webTestClient.put().uri("/v1/core-person-record/military-records?prisonerNumber=$PRISONER_NUMBER")
309+
webTestClient.put().uri("/v1/core-person-record/military-records?prisonerNumber=$PRISONER_NUMBER&militarySeq=1")
313310
.contentType(MediaType.APPLICATION_JSON)
314311
.headers(setAuthorisation(roles = listOf(CorePersonRecordRoleConstants.CORE_PERSON_RECORD_READ_WRITE_ROLE)))
315312
.bodyValue(UPDATE_MILITARY_RECORD)
@@ -323,7 +320,7 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
323320

324321
@Test
325322
fun `handles a 404 not found response from downstream api`() {
326-
webTestClient.put().uri("/v1/core-person-record/military-records?prisonerNumber=$PRISONER_NUMBER_NOT_FOUND")
323+
webTestClient.put().uri("/v1/core-person-record/military-records?prisonerNumber=$PRISONER_NUMBER_NOT_FOUND&militarySeq=1")
327324
.contentType(MediaType.APPLICATION_JSON)
328325
.headers(setAuthorisation(roles = listOf(CorePersonRecordRoleConstants.CORE_PERSON_RECORD_READ_WRITE_ROLE)))
329326
.bodyValue(UPDATE_MILITARY_RECORD)
@@ -336,7 +333,7 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
336333

337334
@DisplayName("POST v1/core-person-record/military-records")
338335
@Nested
339-
inner class CreateMilitaryRecords {
336+
inner class CreateMilitaryRecord {
340337

341338
@Nested
342339
inner class Security {
@@ -511,9 +508,7 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
511508
.header("Content-Disposition", "form-data; name=imageFile; filename=filename.jpg")
512509
}
513510

514-
val UPDATE_MILITARY_RECORD = UpdateMilitaryRecord(
515-
bookingId = -1L,
516-
militarySeq = 1,
511+
val UPDATE_MILITARY_RECORD = MilitaryRecordRequest(
517512
warZoneCode = "AFG",
518513
startDate = LocalDate.parse("2021-01-01"),
519514
militaryDischargeCode = "HON",
@@ -528,7 +523,7 @@ class CorePersonRecordV1ResourceIntTest : IntegrationTestBase() {
528523
disciplinaryActionCode = "CM",
529524
)
530525

531-
val CREATE_MILITARY_RECORD = CreateMilitaryRecord(
526+
val CREATE_MILITARY_RECORD = MilitaryRecordRequest(
532527
startDate = LocalDate.parse("2021-01-01"),
533528
militaryBranchCode = "NAV",
534529
selectiveServicesFlag = false,

0 commit comments

Comments
 (0)