Skip to content

Commit db83438

Browse files
authored
Merge pull request #29 from companieshouse/lp-206-create-post-endpoint
LP-206 create initial version of post endpoint
2 parents 6a36bd9 + f11f768 commit db83438

File tree

6 files changed

+161
-9
lines changed

6 files changed

+161
-9
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2222
<spring-boot-dependencies.version>3.3.4</spring-boot-dependencies.version>
2323
<spring-boot-maven-plugin.version>3.3.4</spring-boot-maven-plugin.version>
24+
<api-sdk-java.version>6.0.21</api-sdk-java.version>
2425
<structured-logging.version>3.0.20</structured-logging.version>
2526
<log4j.version>2.24.1</log4j.version>
2627
<jib-maven-plugin.version>3.4.2</jib-maven-plugin.version>
@@ -67,6 +68,11 @@
6768
<artifactId>structured-logging</artifactId>
6869
<version>${structured-logging.version}</version>
6970
</dependency>
71+
<dependency>
72+
<groupId>uk.gov.companieshouse</groupId>
73+
<artifactId>api-sdk-java</artifactId>
74+
<version>${api-sdk-java.version}</version>
75+
</dependency>
7076

7177
<!-- Test dependencies -->
7278
<dependency>

spec/schema.json

Lines changed: 68 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,91 @@
11
{
2-
"swagger": "2.0",
2+
"openapi": "3.0.1",
33
"info": {
44
"title": "Companies House - Limited Partnerships API",
5-
"description": "An API to allow the registration, transition and update of limited partnerships",
5+
"description": "An API to allow the registration, transition and update of Limited Partnerships",
66
"version": "1.0.0"
77
},
8-
"host": "api.companieshouse.gov.uk",
8+
"servers": [
9+
{
10+
"url": "https://api.companieshouse.gov.uk/"
11+
}
12+
],
913
"tags": [
1014
{
1115
"name": "Limited Partnerships"
1216
}
1317
],
1418
"paths": {
19+
"/transactions/{transaction_id}/limited-partnership/partnership": {
20+
"post": {
21+
"tags": [
22+
"Limited Partnership"
23+
],
24+
"summary": "Create a Limited Partnership submission",
25+
"parameters": [
26+
{
27+
"name": "transaction_id",
28+
"in": "path",
29+
"required": true,
30+
"schema": {
31+
"type": "string"
32+
}
33+
}
34+
],
35+
"responses": {
36+
"201": {
37+
"description": "Limited Partnership Submission has been successfully created.",
38+
"content": {
39+
"application/json": {
40+
"schema": {
41+
"$ref": "#/components/schemas/LimitedPartnershipSubmissionCreatedResponse"
42+
}
43+
}
44+
}
45+
},
46+
"400": {
47+
"description": "Bad Request"
48+
},
49+
"401": {
50+
"description": "Unauthorised"
51+
},
52+
"500": {
53+
"description": "Internal Server Error"
54+
}
55+
}
56+
}
57+
},
1558
"/limited-partnership/healthcheck": {
1659
"get": {
1760
"summary": "Health check URL returns 200 if service is running",
18-
"produces": [
19-
"application/json"
20-
],
2161
"tags": [
22-
"Limited Partnerships"
62+
"Limited Partnership"
2363
],
2464
"responses": {
2565
"200": {
26-
"description": "Request has been received"
66+
"description": "Request has been received",
67+
"content": {
68+
"application/json": {
69+
"schema": {
70+
"type": "object"
71+
}
72+
}
73+
}
74+
}
75+
}
76+
}
77+
}
78+
},
79+
"components": {
80+
"schemas": {
81+
"LimitedPartnershipSubmissionCreatedResponse": {
82+
"type": "object",
83+
"properties": {
84+
"id": {
85+
"type": "string"
2786
}
2887
}
2988
}
3089
}
3190
}
32-
}
91+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.controller;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import org.springframework.http.ResponseEntity;
5+
import org.springframework.web.bind.annotation.PostMapping;
6+
import org.springframework.web.bind.annotation.RequestMapping;
7+
import org.springframework.web.bind.annotation.RestController;
8+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dto.LimitedPartnershipSubmissionCreatedResponseDto;
9+
import uk.gov.companieshouse.limitedpartnershipsapi.utils.ApiLogger;
10+
11+
import java.net.URI;
12+
13+
import static uk.gov.companieshouse.limitedpartnershipsapi.utils.Constants.URL_PARAM_TRANSACTION_ID;
14+
15+
@RestController
16+
@RequestMapping("/transactions/{" + URL_PARAM_TRANSACTION_ID + "}/limited-partnership/partnership")
17+
public class PartnershipController {
18+
19+
@PostMapping
20+
public ResponseEntity<Object> createPartnership(
21+
HttpServletRequest request) {
22+
23+
ApiLogger.debug("createPartnership");
24+
25+
URI location = URI.create("/transactions/12321123/limited-partnership/partnership/3235233232");
26+
LimitedPartnershipSubmissionCreatedResponseDto response = new LimitedPartnershipSubmissionCreatedResponseDto();
27+
response.setId("3235233232");
28+
return ResponseEntity.created(location).body(response);
29+
}
30+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.model.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
public class LimitedPartnershipSubmissionCreatedResponseDto {
6+
7+
@JsonProperty("id")
8+
private String id;
9+
10+
public String getId() {
11+
return id;
12+
}
13+
14+
public void setId(String id) {
15+
this.id = id;
16+
}
17+
}

src/main/java/uk/gov/companieshouse/limitedpartnershipsapi/utils/Constants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ private Constants() { }
66

77
// Request header names
88
public static final String ERIC_REQUEST_ID_KEY = "X-Request-Id";
9+
10+
// URL path parameters
11+
public static final String URL_PARAM_TRANSACTION_ID = "transaction_id";
912
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package uk.gov.companieshouse.limitedpartnershipsapi.controller;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.ExtendWith;
5+
import org.mockito.InjectMocks;
6+
import org.mockito.Mock;
7+
import org.mockito.junit.jupiter.MockitoExtension;
8+
import org.springframework.http.HttpHeaders;
9+
import org.springframework.http.HttpStatus;
10+
import org.springframework.mock.web.MockHttpServletRequest;
11+
import uk.gov.companieshouse.limitedpartnershipsapi.model.dto.LimitedPartnershipSubmissionCreatedResponseDto;
12+
13+
import java.util.Objects;
14+
15+
import static org.junit.jupiter.api.Assertions.assertEquals;
16+
17+
@ExtendWith(MockitoExtension.class)
18+
class PartnershipControllerTest {
19+
20+
@InjectMocks
21+
private PartnershipController partnershipController;
22+
23+
@Mock
24+
private MockHttpServletRequest mockHttpServletRequest;
25+
26+
@Test
27+
void testCreatePartnership() {
28+
var response = partnershipController.createPartnership(mockHttpServletRequest);
29+
30+
assertEquals(HttpStatus.CREATED.value(), response.getStatusCode().value());
31+
var responseHeaderLocation = Objects.requireNonNull(response.getHeaders().get(HttpHeaders.LOCATION)).getFirst();
32+
assertEquals("/transactions/12321123/limited-partnership/partnership/3235233232", responseHeaderLocation);
33+
LimitedPartnershipSubmissionCreatedResponseDto responseBody = (LimitedPartnershipSubmissionCreatedResponseDto) response.getBody();
34+
assert responseBody != null;
35+
assertEquals("3235233232", responseBody.getId());
36+
}
37+
}

0 commit comments

Comments
 (0)