Skip to content

Commit ae0e6fb

Browse files
authored
Merge pull request #30 from companieshouse/feature/lp-207-create-persistence-service
LP-207 create service to persist submission
2 parents db83438 + cfc641f commit ae0e6fb

File tree

12 files changed

+399
-0
lines changed

12 files changed

+399
-0
lines changed

pom.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
<java.version>21</java.version>
1919
<maven.compiler.source>${java.version}</maven.compiler.source>
2020
<maven.compiler.target>${java.version}</maven.compiler.target>
21+
<maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
2122
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2223
<spring-boot-dependencies.version>3.3.4</spring-boot-dependencies.version>
2324
<spring-boot-maven-plugin.version>3.3.4</spring-boot-maven-plugin.version>
2425
<api-sdk-java.version>6.0.21</api-sdk-java.version>
2526
<structured-logging.version>3.0.20</structured-logging.version>
27+
<org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
2628
<log4j.version>2.24.1</log4j.version>
2729
<jib-maven-plugin.version>3.4.2</jib-maven-plugin.version>
2830
</properties>
@@ -63,6 +65,10 @@
6365
<groupId>org.springframework.boot</groupId>
6466
<artifactId>spring-boot-starter-actuator</artifactId>
6567
</dependency>
68+
<dependency>
69+
<groupId>org.springframework.boot</groupId>
70+
<artifactId>spring-boot-starter-data-mongodb</artifactId>
71+
</dependency>
6672
<dependency>
6773
<groupId>uk.gov.companieshouse</groupId>
6874
<artifactId>structured-logging</artifactId>
@@ -73,6 +79,11 @@
7379
<artifactId>api-sdk-java</artifactId>
7480
<version>${api-sdk-java.version}</version>
7581
</dependency>
82+
<dependency>
83+
<groupId>org.mapstruct</groupId>
84+
<artifactId>mapstruct</artifactId>
85+
<version>${org.mapstruct.version}</version>
86+
</dependency>
7687

7788
<!-- Test dependencies -->
7889
<dependency>
@@ -86,6 +97,11 @@
8697
<version>${sonar-maven-plugin.version}</version>
8798
<scope>test</scope>
8899
</dependency>
100+
<dependency>
101+
<groupId>junit</groupId>
102+
<artifactId>junit</artifactId>
103+
<scope>test</scope>
104+
</dependency>
89105
</dependencies>
90106

91107
<build>
@@ -106,6 +122,22 @@
106122
</execution>
107123
</executions>
108124
</plugin>
125+
<plugin>
126+
<groupId>org.apache.maven.plugins</groupId>
127+
<artifactId>maven-compiler-plugin</artifactId>
128+
<version>${maven-compiler-plugin.version}</version>
129+
<configuration>
130+
<source>${java.version}</source>
131+
<target>${java.version}</target>
132+
<annotationProcessorPaths>
133+
<path>
134+
<groupId>org.mapstruct</groupId>
135+
<artifactId>mapstruct-processor</artifactId>
136+
<version>${org.mapstruct.version}</version>
137+
</path>
138+
</annotationProcessorPaths>
139+
</configuration>
140+
</plugin>
109141
<plugin>
110142
<groupId>com.google.cloud.tools</groupId>
111143
<artifactId>jib-maven-plugin</artifactId>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.mapper;
2+
3+
import org.mapstruct.Mapper;
4+
import org.mapstruct.factory.Mappers;
5+
import org.springframework.stereotype.Component;
6+
import uk.gov.companieshouse.limitedpartnershipsapi.model.PartnershipNameEnding;
7+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dao.DataDao;
8+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dao.LimitedPartnershipSubmissionDao;
9+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dto.DataDto;
10+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dto.LimitedPartnershipSubmissionDto;
11+
12+
@Component
13+
@Mapper(componentModel = "spring")
14+
public interface LimitedPartnershipMapper {
15+
16+
LimitedPartnershipMapper INSTANCE = Mappers.getMapper(LimitedPartnershipMapper.class);
17+
18+
LimitedPartnershipSubmissionDao dtoToDao(LimitedPartnershipSubmissionDto dto);
19+
20+
default String mapPartnershipNameEndingToString(PartnershipNameEnding nameEnding){
21+
return nameEnding.getDescription();
22+
}
23+
24+
default PartnershipNameEnding mapPartnershipNameEndingToEnum(String nameEnding){
25+
return nameEnding != null ? PartnershipNameEnding.fromDescription(nameEnding) : null;
26+
}
27+
28+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.model;
2+
3+
public enum PartnershipNameEnding {
4+
5+
LIMITED_PARTNERSHIP("Limited Partnership"),
6+
LP("LP"),
7+
L_DOT_P_DOT("L.P."),
8+
PARTNERIAETH_CYFYNGEDIG("Partneriaeth Cyfyngedig"),
9+
PC("PC"),
10+
P_DOT_C_DOT("P.C.");
11+
12+
private final String description;
13+
14+
PartnershipNameEnding(String description) {
15+
this.description = description;
16+
};
17+
18+
public String getDescription() {
19+
return description;
20+
}
21+
22+
public static PartnershipNameEnding fromDescription(String description) {
23+
for (PartnershipNameEnding nameEnding : PartnershipNameEnding.values()) {
24+
if (nameEnding.getDescription().equalsIgnoreCase(description)) {
25+
return nameEnding;
26+
}
27+
}
28+
throw new IllegalArgumentException("No PartnershipNameEnding constant with description " + description);
29+
}
30+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.model.dao;
2+
3+
import org.springframework.data.mongodb.core.mapping.Field;
4+
5+
public class DataDao {
6+
7+
@Field("partnership_name")
8+
private String partnershipName;
9+
10+
@Field("name_ending")
11+
private String nameEnding;
12+
13+
public String getPartnershipName() {
14+
return partnershipName;
15+
}
16+
17+
public void setPartnershipName(String partnershipName) {
18+
this.partnershipName = partnershipName;
19+
}
20+
21+
public String getNameEnding() {
22+
return nameEnding;
23+
}
24+
25+
public void setNameEnding(String nameEnding) {
26+
this.nameEnding = nameEnding;
27+
}
28+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.model.dao;
2+
3+
import org.springframework.data.annotation.Id;
4+
import org.springframework.data.mongodb.core.mapping.Document;
5+
import org.springframework.data.mongodb.core.mapping.Field;
6+
7+
import java.time.LocalDateTime;
8+
9+
@Document(collection = "limited_partnership_submissions")
10+
public class LimitedPartnershipSubmissionDao {
11+
12+
@Id
13+
private String id;
14+
15+
@Field("created_at")
16+
private LocalDateTime createdAt;
17+
18+
@Field("created_by_user_id")
19+
private String userId;
20+
21+
@Field("data")
22+
private DataDao data;
23+
24+
public String getId() {
25+
return id;
26+
}
27+
28+
public void setId(String id) {
29+
this.id = id;
30+
}
31+
32+
public LocalDateTime getCreatedAt() {
33+
return createdAt;
34+
}
35+
36+
public void setCreatedAt(LocalDateTime createdAt) {
37+
this.createdAt = createdAt;
38+
}
39+
40+
public DataDao getData() {
41+
return data;
42+
}
43+
44+
public void setData(DataDao data) {
45+
this.data = data;
46+
}
47+
48+
public String getUserId() {
49+
return userId;
50+
}
51+
52+
public void setUserId(String userId) {
53+
this.userId = userId;
54+
}
55+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.model.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import uk.gov.companieshouse.limitedpartnershipsapi.model.PartnershipNameEnding;
6+
7+
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
8+
9+
public class DataDto {
10+
@JsonInclude(NON_NULL)
11+
@JsonProperty("partnership_name")
12+
private String partnershipName;
13+
14+
@JsonInclude(NON_NULL)
15+
@JsonProperty("name_ending")
16+
private PartnershipNameEnding nameEnding;
17+
18+
public String getPartnershipName() {
19+
return partnershipName;
20+
}
21+
22+
public void setPartnershipName(String partnershipName) {
23+
this.partnershipName = partnershipName;
24+
}
25+
26+
public PartnershipNameEnding getNameEnding() {
27+
return nameEnding;
28+
}
29+
30+
public void setNameEnding(PartnershipNameEnding nameEnding) {
31+
this.nameEnding = nameEnding;
32+
}
33+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.model.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
6+
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
7+
8+
public class LimitedPartnershipSubmissionDto {
9+
10+
@JsonInclude(NON_NULL)
11+
@JsonProperty("data")
12+
private DataDto data;
13+
14+
public DataDto getData() {
15+
return data;
16+
}
17+
18+
public void setData(DataDto data) {
19+
this.data = data;
20+
}
21+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.repository;
2+
3+
import org.springframework.data.mongodb.repository.MongoRepository;
4+
import org.springframework.stereotype.Repository;
5+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dao.LimitedPartnershipSubmissionDao;
6+
7+
@Repository
8+
public interface LimitedPartnershipSubmissionsRepository extends MongoRepository<LimitedPartnershipSubmissionDao, String> {
9+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.service;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.stereotype.Service;
5+
import uk.gov.companieshouse.limitedpartnershipsapi.mapper.LimitedPartnershipMapper;
6+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dao.LimitedPartnershipSubmissionDao;
7+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dto.LimitedPartnershipSubmissionDto;
8+
import uk.gov.companieshouse.limitedpartnershipsapi.repository.LimitedPartnershipSubmissionsRepository;
9+
import uk.gov.companieshouse.limitedpartnershipsapi.utils.ApiLogger;
10+
11+
import java.time.LocalDateTime;
12+
13+
@Service
14+
public class LimitedPartnershipService {
15+
16+
private final LimitedPartnershipMapper mapper;
17+
private final LimitedPartnershipSubmissionsRepository repository;
18+
19+
@Autowired
20+
public LimitedPartnershipService(LimitedPartnershipMapper mapper, LimitedPartnershipSubmissionsRepository repository) {
21+
this.mapper = mapper;
22+
this.repository = repository;
23+
}
24+
25+
public String createLimitedPartnership(LimitedPartnershipSubmissionDto limitedPartnershipSubmissionDto, String requestId, String userId) {
26+
ApiLogger.debug("Called createLimitedPartnership(...)");
27+
28+
LimitedPartnershipSubmissionDao dao = mapper.dtoToDao(limitedPartnershipSubmissionDto);
29+
dao.setCreatedAt(LocalDateTime.now());
30+
dao.setUserId(userId);
31+
LimitedPartnershipSubmissionDao insertedSubmission = repository.insert(dao);
32+
ApiLogger.infoContext(requestId, String.format("Limited Partnership Submission created with limited-partnership submission id: %s", insertedSubmission.getId()));
33+
34+
return insertedSubmission.getId();
35+
}
36+
}

src/main/resources/application.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
limited_partnerships.mongodb.dbname=transactions_limited_partnerships
2+
spring.data.mongodb.uri=${MONGODB_URL}/${limited_partnerships.mongodb.dbname}
3+
14
# Spring actuator end-points config
25
management.endpoints.enabled-by-default=false
36
management.endpoint.health.enabled=true

0 commit comments

Comments
 (0)