Skip to content

Commit f8f48d3

Browse files
GetPerson service - added another method
1 parent 7138b03 commit f8f48d3

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetPersonService.kt

+31
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,48 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.services
22

33
import org.springframework.beans.factory.annotation.Autowired
44
import org.springframework.stereotype.Service
5+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.gateways.PrisonerOffenderSearchGateway
56
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.gateways.ProbationOffenderSearchGateway
67
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Person
78
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response
89

910
@Service
1011
class GetPersonService(
1112
@Autowired val probationOffenderSearchGateway: ProbationOffenderSearchGateway,
13+
@Autowired val prisonerOffenderSearchGateway: PrisonerOffenderSearchGateway,
1214
) {
1315
fun execute(hmppsId: String): Response<Person?> {
1416
val personFromProbationOffenderSearch = probationOffenderSearchGateway.getPerson(id = hmppsId)
1517

1618
return Response(data = personFromProbationOffenderSearch.data, errors = personFromProbationOffenderSearch.errors)
1719
}
20+
21+
fun getCombinedDataForPerson(hmppsId: String): Response<Map<String, Person?>> {
22+
val probationResponse = probationOffenderSearchGateway.getPerson(id = hmppsId)
23+
24+
val prisonResponse =
25+
probationResponse.data?.identifiers?.nomisNumber?.let {
26+
prisonerOffenderSearchGateway.getPrisonOffender(nomsNumber = it)
27+
}
28+
29+
return if (prisonResponse != null) {
30+
Response(
31+
data =
32+
mapOf(
33+
"prisonerOffenderSearch" to prisonResponse.data?.toPerson(),
34+
"probationOffenderSearch" to probationResponse.data,
35+
),
36+
errors = prisonResponse.errors + probationResponse.errors,
37+
)
38+
} else {
39+
Response(
40+
data =
41+
mapOf(
42+
"prisonerOffenderSearch" to null,
43+
"probationOffenderSearch" to probationResponse.data,
44+
),
45+
errors = probationResponse.errors,
46+
)
47+
}
48+
}
1849
}

src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetPersonServiceTest.kt

+22
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.gateways.ProbationOffend
1414
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Identifiers
1515
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Person
1616
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response
17+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.prisoneroffendersearch.POSPrisoner
1718

1819
@ContextConfiguration(
1920
initializers = [ConfigDataApplicationContextInitializer::class],
@@ -36,6 +37,9 @@ internal class GetPersonServiceTest(
3637
whenever(probationOffenderSearchGateway.getPerson(id = hmppsId)).thenReturn(
3738
Response(data = Person(firstName = "Qui-gon", lastName = "Jin", identifiers = Identifiers(nomisNumber = "A1234AA"))),
3839
)
40+
whenever(prisonerOffenderSearchGateway.getPrisonOffender(nomsNumber = "A1234AA")).thenReturn(
41+
Response(data = POSPrisoner(firstName = "Sam", lastName = "Mills")),
42+
)
3943
}
4044

4145
it("gets a person from Probation Offender Search") {
@@ -66,4 +70,22 @@ internal class GetPersonServiceTest(
6670

6771
result.data.shouldBe(expectedResult)
6872
}
73+
74+
it("returns a person with both probation and prison data when prison data exists") {
75+
val personFromProbationOffenderSearch = Person("Paula", "First", identifiers = Identifiers(nomisNumber = "A1234AA"))
76+
val personFromPrisonOffenderSearch = POSPrisoner("Sam", "Mills")
77+
78+
whenever(probationOffenderSearchGateway.getPerson(hmppsId)).thenReturn(
79+
Response(data = personFromProbationOffenderSearch),
80+
)
81+
whenever(prisonerOffenderSearchGateway.getPrisonOffender("A1234AA")).thenReturn(
82+
Response(data = personFromPrisonOffenderSearch),
83+
)
84+
85+
val result = getPersonService.getCombinedDataForPerson(hmppsId)
86+
val expectedResult = result.data
87+
88+
result.data.shouldBe(expectedResult)
89+
result.errors shouldBe emptyList()
90+
}
6991
})

0 commit comments

Comments
 (0)