Skip to content

Commit f94b5ff

Browse files
authored
Merge pull request #175 from companieshouse/feature/refactor-data-types-individual-full-record
Using new PscIndividualFullRecordApi model in sdk
2 parents 4fdfc51 + ac12722 commit f94b5ff

File tree

6 files changed

+87
-52
lines changed

6 files changed

+87
-52
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<!-- Internal -->
3333
<structured-logging.version>3.0.20</structured-logging.version>
3434
<private-api-sdk-java.version>4.0.269</private-api-sdk-java.version>
35-
<api-sdk-java.version>6.0.33</api-sdk-java.version>
35+
<api-sdk-java.version>6.0.36</api-sdk-java.version>
3636
<api-security-java.version>2.0.5</api-security-java.version>
3737

3838
<!-- tests -->
@@ -388,4 +388,4 @@
388388
</build>
389389

390390

391-
</project>
391+
</project>

src/main/java/uk/gov/companieshouse/pscdataapi/controller/CompanyPscFullRecordGetController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.springframework.web.bind.annotation.PathVariable;
77
import org.springframework.web.bind.annotation.RequestMapping;
88
import org.springframework.web.bind.annotation.RestController;
9-
import uk.gov.companieshouse.api.model.psc.IndividualFullRecord;
9+
import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
1010
import uk.gov.companieshouse.logging.Logger;
1111
import uk.gov.companieshouse.logging.LoggerFactory;
1212
import uk.gov.companieshouse.pscdataapi.exceptions.ResourceNotFoundException;
@@ -35,7 +35,7 @@ public CompanyPscFullRecordGetController(final CompanyPscService pscService) {
3535
* @return ResponseEntity
3636
*/
3737
@GetMapping("/individual/{notification_id}/full_record")
38-
public ResponseEntity<IndividualFullRecord> getIndividualFullRecordPscData(
38+
public ResponseEntity<PscIndividualFullRecordApi> getIndividualFullRecordPscData(
3939
@PathVariable("company_number") final String companyNumber,
4040
@PathVariable("notification_id") final String notificationId) {
4141
DataMapHolder.get()
@@ -44,7 +44,7 @@ public ResponseEntity<IndividualFullRecord> getIndividualFullRecordPscData(
4444
LOGGER.info(String.format(GETTING_FULL_RECORD_PSC_DATA_WITH_COMPANY_NUMBER, companyNumber),
4545
DataMapHolder.getLogMap());
4646
try {
47-
final IndividualFullRecord individualFullRecord = pscService.getIndividualFullRecord(companyNumber, notificationId);
47+
final PscIndividualFullRecordApi individualFullRecord = pscService.getIndividualFullRecord(companyNumber, notificationId);
4848
return ResponseEntity.ok(individualFullRecord);
4949
} catch (final ResourceNotFoundException ex) {
5050
LOGGER.error(ex.getMessage(), DataMapHolder.getLogMap());

src/main/java/uk/gov/companieshouse/pscdataapi/service/CompanyPscService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import uk.gov.companieshouse.api.metrics.MetricsApi;
1818
import uk.gov.companieshouse.api.metrics.RegisterApi;
1919
import uk.gov.companieshouse.api.metrics.RegistersApi;
20-
import uk.gov.companieshouse.api.model.psc.IndividualFullRecord;
20+
import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
2121
import uk.gov.companieshouse.api.psc.CorporateEntity;
2222
import uk.gov.companieshouse.api.psc.CorporateEntityBeneficialOwner;
2323
import uk.gov.companieshouse.api.psc.FullRecordCompanyPSCApi;
@@ -194,15 +194,15 @@ public void deletePsc(PscDeleteRequest deleteRequest)
194194
* @param notificationId Mongo Id.
195195
* @return Full Record PSC object.
196196
*/
197-
public IndividualFullRecord getIndividualFullRecord(final String companyNumber, final String notificationId) {
197+
public PscIndividualFullRecordApi getIndividualFullRecord(final String companyNumber, final String notificationId) {
198198
try {
199199
final Optional<PscDocument> pscDocument = repository.getPscByCompanyNumberAndId(companyNumber,
200200
notificationId)
201201
.filter(document -> document.getData().getKind()
202202
.equals("individual-person-with-significant-control"));
203203

204204
if (pscDocument.isPresent()) {
205-
final IndividualFullRecord individualFullRecord = transformer.transformPscDocToIndividualFullRecord(
205+
final PscIndividualFullRecordApi individualFullRecord = transformer.transformPscDocToIndividualFullRecord(
206206
pscDocument.get());
207207

208208
if (individualFullRecord == null) {

src/main/java/uk/gov/companieshouse/pscdataapi/transform/CompanyPscTransformer.java

Lines changed: 57 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@
22

33
import java.time.LocalDate;
44
import java.time.format.DateTimeFormatter;
5-
65
import java.util.List;
6+
77
import org.springframework.stereotype.Component;
8-
import uk.gov.companieshouse.api.model.psc.IndividualFullRecord;
9-
import uk.gov.companieshouse.api.psc.Identification;
8+
import uk.gov.companieshouse.api.model.common.Date3Tuple;
9+
import uk.gov.companieshouse.api.model.psc.NameElementsApi;
10+
import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
11+
import uk.gov.companieshouse.api.model.psc.PscLinks;
1012
import uk.gov.companieshouse.api.psc.CorporateEntity;
1113
import uk.gov.companieshouse.api.psc.CorporateEntityBeneficialOwner;
1214
import uk.gov.companieshouse.api.psc.Data;
1315
import uk.gov.companieshouse.api.psc.ExternalData;
1416
import uk.gov.companieshouse.api.psc.FullRecordCompanyPSCApi;
17+
import uk.gov.companieshouse.api.psc.Identification;
1518
import uk.gov.companieshouse.api.psc.Individual;
1619
import uk.gov.companieshouse.api.psc.IndividualBeneficialOwner;
1720
import uk.gov.companieshouse.api.psc.InternalData;
@@ -89,31 +92,31 @@ public Individual transformPscDocToIndividual(
8992
* @param pscDocument PSC.
9093
* @return PSC mongo Document.
9194
*/
92-
public IndividualFullRecord transformPscDocToIndividualFullRecord(final PscDocument pscDocument) {
93-
logger.info("Attempting to transform pscDocument to Individual Full Record", DataMapHolder.getLogMap());
94-
95-
final IndividualFullRecord individualFullRecord = new IndividualFullRecord();
95+
public PscIndividualFullRecordApi transformPscDocToIndividualFullRecord(final PscDocument pscDocument) {
96+
logger.info("Attempting to transform pscDocument to Individual Full Record",
97+
DataMapHolder.getLogMap());
98+
final PscIndividualFullRecordApi pscIndividualFullRecordApi = new PscIndividualFullRecordApi();
9699

97100
final PscData pscData = pscDocument.getData();
98-
individualFullRecord.setName(pscData.getName());
99-
individualFullRecord.setNameElements(mapNameElements(pscData.getNameElements()));
100-
individualFullRecord.setCountryOfResidence(pscData.getCountryOfResidence());
101-
individualFullRecord.setNotifiedOn(pscData.getNotifiedOn());
102-
individualFullRecord.setCeasedOn(pscData.getCeasedOn());
103-
individualFullRecord.setNaturesOfControl(pscData.getNaturesOfControl());
104-
individualFullRecord.setNationality(pscData.getNationality());
105-
individualFullRecord.setKind(IndividualFullRecord.KindEnum.INDIVIDUAL_PERSON_WITH_SIGNIFICANT_CONTROL);
106-
individualFullRecord.setLinks(mapLinksToList(pscData.getLinks()));
107-
individualFullRecord.serviceAddress(mapFullRecordAddress(pscData.getAddress()));
108-
individualFullRecord.setEtag(pscData.getEtag());
101+
pscIndividualFullRecordApi.setName(pscData.getName());
102+
pscIndividualFullRecordApi.setNameElements(mapNameElementsApi(pscData.getNameElements()));
103+
pscIndividualFullRecordApi.setCountryOfResidence(pscData.getCountryOfResidence());
104+
pscIndividualFullRecordApi.setNotifiedOn(pscData.getNotifiedOn());
105+
pscIndividualFullRecordApi.setCeasedOn(pscData.getCeasedOn());
106+
pscIndividualFullRecordApi.setNaturesOfControl(pscData.getNaturesOfControl());
107+
pscIndividualFullRecordApi.setNationality(pscData.getNationality());
108+
pscIndividualFullRecordApi.setKind(PscIndividualFullRecordApi.KindEnum.INDIVIDUAL_PERSON_WITH_SIGNIFICANT_CONTROL);
109+
pscIndividualFullRecordApi.setLinks(mapLinksToPscLinks(pscData.getLinks()));
110+
pscIndividualFullRecordApi.serviceAddress(mapFullRecordAddress(pscData.getAddress()));
111+
pscIndividualFullRecordApi.setEtag(pscData.getEtag());
109112

110113
final PscSensitiveData sensitivePscData = pscDocument.getSensitiveData();
111-
individualFullRecord.setResidentialAddressSameAsServiceAddress(sensitivePscData.getResidentialAddressIsSameAsServiceAddress());
112-
individualFullRecord.setDateOfBirth(mapDateOfBirth(sensitivePscData.getDateOfBirth(), true));
113-
individualFullRecord.setUsualResidentialAddress(mapFullRecordAddress(sensitivePscData.getUsualResidentialAddress()));
114-
individualFullRecord.setInternalId(sensitivePscData.getInternalId());
114+
pscIndividualFullRecordApi.setResidentialAddressSameAsServiceAddress(sensitivePscData.getResidentialAddressIsSameAsServiceAddress());
115+
pscIndividualFullRecordApi.setDateOfBirth(mapDate3Tuple(sensitivePscData.getDateOfBirth(), true));
116+
pscIndividualFullRecordApi.setUsualResidentialAddress(mapFullRecordAddress(sensitivePscData.getUsualResidentialAddress()));
117+
pscIndividualFullRecordApi.setInternalId(sensitivePscData.getInternalId());
115118

116-
return individualFullRecord;
119+
return pscIndividualFullRecordApi;
117120
}
118121

119122
/**
@@ -491,6 +494,18 @@ private uk.gov.companieshouse.api.psc.DateOfBirth mapDateOfBirth(
491494
}
492495
}
493496

497+
private Date3Tuple mapDate3Tuple(DateOfBirth inputDateOfBirth, boolean showFullDateOfBirth) {
498+
if (inputDateOfBirth != null) {
499+
int day = showFullDateOfBirth ? inputDateOfBirth.getDay() : 0;
500+
int month = inputDateOfBirth.getMonth();
501+
int year = inputDateOfBirth.getYear();
502+
503+
return new Date3Tuple(day, month, year);
504+
} else {
505+
return null;
506+
}
507+
}
508+
494509
private uk.gov.companieshouse.api.psc.Address mapAddress(
495510
uk.gov.companieshouse.pscdataapi.models.Address inputAddress) {
496511
if (inputAddress != null) {
@@ -571,6 +586,19 @@ private uk.gov.companieshouse.api.model.common.Address mapFullRecordAddress(
571586
}
572587
}
573588

589+
private NameElementsApi mapNameElementsApi(final NameElements inputNameElements) {
590+
if (inputNameElements != null) {
591+
final NameElementsApi nameElementsApi = new NameElementsApi();
592+
nameElementsApi.setTitle(inputNameElements.getTitle());
593+
nameElementsApi.setForename(inputNameElements.getForename());
594+
nameElementsApi.setMiddleName(inputNameElements.getMiddleName());
595+
nameElementsApi.setSurname(inputNameElements.getSurname());
596+
return nameElementsApi;
597+
} else {
598+
return null;
599+
}
600+
}
601+
574602
private uk.gov.companieshouse.api.psc.NameElements mapNameElements(
575603
NameElements inputNameElements) {
576604
if (inputNameElements != null) {
@@ -603,11 +631,12 @@ private Identification mapIdentification(
603631
}
604632
}
605633

606-
private static List<ItemLinkTypes> mapLinksToList(final Links links) {
607-
final ItemLinkTypes itemLinkTypes = new ItemLinkTypes().self(links.getSelf());
608-
609-
itemLinkTypes.setStatement(links.getStatement());
634+
private static PscLinks mapLinksToPscLinks(final Links links) {
635+
final PscLinks pscLinks = new PscLinks();
636+
pscLinks.setSelf(links.getSelf());
637+
pscLinks.setStatement(links.getStatement());
638+
pscLinks.setExemptions(links.getExemptions());
610639

611-
return List.of(itemLinkTypes);
640+
return pscLinks;
612641
}
613642
}

src/test/java/uk/gov/companieshouse/pscdataapi/controller/CompanyPscFullRecordGetControllerTest.java

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2121
import org.springframework.test.web.servlet.MockMvc;
2222
import uk.gov.companieshouse.api.model.common.Address;
23-
import uk.gov.companieshouse.api.model.psc.IndividualFullRecord;
23+
import uk.gov.companieshouse.api.model.common.Date3Tuple;
24+
import uk.gov.companieshouse.api.model.psc.NameElementsApi;
25+
import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
26+
import uk.gov.companieshouse.api.model.psc.PscLinks;
2427
import uk.gov.companieshouse.api.model.psc.VerificationState;
2528
import uk.gov.companieshouse.api.model.psc.VerificationStatus;
26-
import uk.gov.companieshouse.api.psc.DateOfBirth;
27-
import uk.gov.companieshouse.api.psc.ItemLinkTypes;
28-
import uk.gov.companieshouse.api.psc.NameElements;
2929
import uk.gov.companieshouse.pscdataapi.exceptions.ResourceNotFoundException;
3030
import uk.gov.companieshouse.pscdataapi.service.CompanyPscService;
3131

@@ -77,11 +77,9 @@ void getIndividualPSC() throws Exception {
7777
"forename": "Andy",
7878
"middle_name": "Bob"
7979
},
80-
"links": [
81-
{
80+
"links": {
8281
"self": "/company/123/persons-with-significant-control/456"
83-
}
84-
],
82+
},
8583
"nationality": "British",
8684
"service_address": {
8785
"address_line_1": "addressLine1",
@@ -133,7 +131,7 @@ void shouldReturn404WhenIndividualPscNotFound() throws Exception {
133131
.andExpect(status().isNotFound());
134132
}
135133

136-
private static IndividualFullRecord createFullRecord() {
134+
private static PscIndividualFullRecordApi createFullRecord() {
137135
final Address serviceAddress = new Address();
138136
serviceAddress.setAddressLine1("addressLine1");
139137
serviceAddress.setPostalCode("CF12 3AB");
@@ -144,18 +142,26 @@ private static IndividualFullRecord createFullRecord() {
144142
residentialAddress.setAddressLine1("Home street");
145143
residentialAddress.setPostalCode("AB12 3CD");
146144

147-
return new IndividualFullRecord()
148-
.kind(IndividualFullRecord.KindEnum.INDIVIDUAL_PERSON_WITH_SIGNIFICANT_CONTROL)
145+
final NameElementsApi nameElementsApi = new NameElementsApi();
146+
nameElementsApi.setForename("Andy");
147+
nameElementsApi.setMiddleName("Bob");
148+
nameElementsApi.setSurname("Smith");
149+
150+
final PscLinks pscLinks = new PscLinks();
151+
pscLinks.setSelf("/company/123/persons-with-significant-control/456");
152+
153+
return new PscIndividualFullRecordApi()
154+
.kind(PscIndividualFullRecordApi.KindEnum.INDIVIDUAL_PERSON_WITH_SIGNIFICANT_CONTROL)
149155
.name("Andy Bob Smith")
150-
.nameElements(new NameElements().forename("Andy").middleName("Bob").surname("Smith"))
156+
.nameElements(nameElementsApi)
151157
.serviceAddress(serviceAddress)
152158
.residentialAddressSameAsServiceAddress(Boolean.FALSE)
153159
.usualResidentialAddress(residentialAddress)
154160
.nationality("British")
155161
.naturesOfControl(Arrays.asList("nature of my control"))
156-
.dateOfBirth(new DateOfBirth().day(1).month(2).year(2000))
162+
.dateOfBirth(new Date3Tuple(1, 2, 2000))
157163
.internalId(123456789L)
158-
.links(Arrays.asList(new ItemLinkTypes().self("/company/123/persons-with-significant-control/456")))
164+
.links(pscLinks)
159165
.verificationState(new VerificationState(VerificationStatus.VERIFIED, LocalDate.of(2025, 1, 10), LocalDate.of(2025, 2, 5)));
160166
}
161167

src/test/java/uk/gov/companieshouse/pscdataapi/service/CompanyPscServiceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -908,7 +908,7 @@ void getIndividualFullRecordShouldReturnFullRecordWhenFound_FlagVerifyStateFalse
908908
when(repository.getPscByCompanyNumberAndId(COMPANY_NUMBER, NOTIFICATION_ID)).thenReturn(
909909
Optional.of(pscDocument));
910910
when(featureFlags.isIndividualPscFullRecordAddVerificationStateEnabled()).thenReturn(false);
911-
when(transformer.transformPscDocToIndividualFullRecord(pscDocument)).thenReturn(new IndividualFullRecord());
911+
when(transformer.transformPscDocToIndividualFullRecord(pscDocument)).thenReturn(new PscIndividualFullRecordApi());
912912

913913
service.getIndividualFullRecord(COMPANY_NUMBER, NOTIFICATION_ID);
914914

@@ -924,7 +924,7 @@ void getIndividualFullRecordShouldReturnFullRecordWhenFound_FlagVerifyStateTrue(
924924
when(featureFlags.isIndividualPscFullRecordAddVerificationStateEnabled()).thenReturn(true);
925925
when(verificationStateApiService.getPscVerificationState(123L))
926926
.thenReturn(Optional.of(new PscVerificationStateApi(VerificationStatusTypeApi.VERIFIED, LocalDate.of(2025, 1, 10), LocalDate.of(2025, 2, 5))));
927-
when(transformer.transformPscDocToIndividualFullRecord(pscDocument)).thenReturn(new IndividualFullRecord().internalId(123L));
927+
when(transformer.transformPscDocToIndividualFullRecord(pscDocument)).thenReturn(new PscIndividualFullRecordApi().internalId(123L));
928928

929929
service.getIndividualFullRecord(COMPANY_NUMBER, NOTIFICATION_ID);
930930

0 commit comments

Comments
 (0)