Skip to content

Commit cb01797

Browse files
Story(CCLS-2099) Post assessment endpoint
includes amendments to the PUT request to update existing assessments
1 parent 92c9b7e commit cb01797

File tree

15 files changed

+248
-106
lines changed

15 files changed

+248
-106
lines changed

assessment-api/open-api-specification.yml

+80-67
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,9 @@ paths:
1111
operationId: 'getAssessments'
1212
parameters:
1313
- $ref: '#/components/parameters/assessmentType'
14-
- name: 'provider-id'
15-
in: 'query'
16-
schema:
17-
type: 'string'
18-
example: '1234567890'
19-
- name: 'case-reference-number'
20-
in: 'query'
21-
schema:
22-
type: 'string'
23-
example: '1234567890'
24-
- name: 'status'
25-
in: 'query'
26-
schema:
27-
type: 'string'
28-
example: 'INCOMPLETE'
14+
- $ref: '#/components/parameters/providerId'
15+
- $ref: '#/components/parameters/caseReferenceNumber'
16+
- $ref: '#/components/parameters/status'
2917
responses:
3018
'200':
3119
description: 'Successful operation'
@@ -41,28 +29,6 @@ paths:
4129
description: 'Not found'
4230
'500':
4331
description: 'Internal server error'
44-
put:
45-
tags:
46-
- assessments
47-
summary: 'update an existing assessment'
48-
operationId: 'updateAssessment'
49-
parameters:
50-
- $ref: '#/components/parameters/requiredUserLoginId'
51-
requestBody:
52-
description: update an existing assessment
53-
content:
54-
application/json:
55-
schema:
56-
$ref: '#/components/schemas/assessmentDetail'
57-
responses:
58-
'204':
59-
description: 'Successful update'
60-
'400':
61-
description: 'Bad request'
62-
'401':
63-
description: 'Unauthorized'
64-
'500':
65-
description: 'Internal server error'
6632
delete:
6733
tags:
6834
- assessments
@@ -83,11 +49,7 @@ paths:
8349
schema:
8450
type: 'string'
8551
example: '1234567890'
86-
- name: 'status'
87-
in: 'query'
88-
schema:
89-
type: 'string'
90-
example: 'INCOMPLETE'
52+
- $ref: '#/components/parameters/status'
9153
responses:
9254
'204':
9355
description: 'Successful deletion'
@@ -99,20 +61,36 @@ paths:
9961
description: 'Not found'
10062
'500':
10163
description: 'Internal server error'
64+
post:
65+
tags:
66+
- assessments
67+
summary: 'create an assessment'
68+
operationId: 'createAssessment'
69+
parameters:
70+
- $ref: '#/components/parameters/requiredUserLoginId'
71+
requestBody:
72+
description: create an assessment
73+
content:
74+
application/json:
75+
schema:
76+
$ref: '#/components/schemas/assessmentDetail'
77+
responses:
78+
'201':
79+
description: 'Successful create'
80+
'400':
81+
description: 'Bad request'
82+
'401':
83+
description: 'Unauthorized'
84+
'500':
85+
description: 'Internal server error'
10286
/assessments/{assessment-id}:
10387
get:
10488
tags:
10589
- assessments
10690
summary: 'get assessment by id '
10791
operationId: 'getAssessment'
10892
parameters:
109-
- name: 'assessment-id'
110-
in: 'path'
111-
required: true
112-
schema:
113-
type: 'integer'
114-
format: 'int64'
115-
example: '1234567890'
93+
- $ref: '#/components/parameters/assessmentId'
11694
responses:
11795
'200':
11896
description: 'Successful operation'
@@ -128,6 +106,29 @@ paths:
128106
description: 'Not found'
129107
'500':
130108
description: 'Internal server error'
109+
put:
110+
tags:
111+
- assessments
112+
summary: 'update an existing assessment'
113+
operationId: 'updateAssessment'
114+
parameters:
115+
- $ref: '#/components/parameters/assessmentId'
116+
- $ref: '#/components/parameters/requiredUserLoginId'
117+
requestBody:
118+
description: update an existing assessment
119+
content:
120+
application/json:
121+
schema:
122+
$ref: '#/components/schemas/assessmentDetail'
123+
responses:
124+
'204':
125+
description: 'Successful update'
126+
'400':
127+
description: 'Bad request'
128+
'401':
129+
description: 'Unauthorized'
130+
'500':
131+
description: 'Internal server error'
131132
patch:
132133
tags:
133134
- assessments
@@ -140,13 +141,7 @@ paths:
140141
schema:
141142
$ref: '#/components/schemas/patchAssessmentDetail'
142143
parameters:
143-
- name: 'assessment-id'
144-
in: 'path'
145-
required: true
146-
schema:
147-
type: 'integer'
148-
format: 'int64'
149-
example: '1234567890'
144+
- $ref: '#/components/parameters/assessmentId'
150145
- $ref: '#/components/parameters/requiredUserLoginId'
151146
responses:
152147
'204':
@@ -166,13 +161,7 @@ paths:
166161
summary: 'delete checkpoint from assessment'
167162
operationId: 'deleteAssessmentCheckpoint'
168163
parameters:
169-
- name: 'assessment-id'
170-
in: 'path'
171-
required: true
172-
schema:
173-
type: 'integer'
174-
format: 'int64'
175-
example: '1234567890'
164+
- $ref: '#/components/parameters/assessmentId'
176165
- $ref: '#/components/parameters/requiredUserLoginId'
177166
responses:
178167
'204':
@@ -204,14 +193,39 @@ components:
204193
- 'meansAssessment_PREPOP'
205194
- 'meritsAssessment'
206195
- 'meritsAssessment_PREPOP'
207-
196+
assessmentId:
197+
name: 'assessment-id'
198+
in: 'path'
199+
required: true
200+
schema:
201+
type: 'integer'
202+
format: 'int64'
203+
example: '1234567890'
208204
requiredUserLoginId:
209205
name: 'Caab-User-Login-Id'
210206
in: header
211207
required: true
212208
schema:
213209
type: 'string'
214210
example: '[email protected]'
211+
providerId:
212+
name: 'provider-id'
213+
in: 'query'
214+
schema:
215+
type: 'string'
216+
example: '1234567890'
217+
caseReferenceNumber:
218+
name: 'case-reference-number'
219+
in: 'query'
220+
schema:
221+
type: 'string'
222+
example: '1234567890'
223+
status:
224+
name: 'status'
225+
in: 'query'
226+
schema:
227+
type: 'string'
228+
example: 'INCOMPLETE'
215229

216230
schemas:
217231
assessmentDetails:
@@ -289,7 +303,6 @@ components:
289303
items:
290304
$ref: '#/components/schemas/assessmentEntityDetail'
291305
required:
292-
- id
293306
- entityType
294307
- entities
295308
assessmentEntityDetail:
@@ -312,8 +325,9 @@ components:
312325
$ref: '#/components/schemas/assessmentRelationshipDetail'
313326
prepopulated:
314327
type: boolean
328+
completed:
329+
type: boolean
315330
required:
316-
- id
317331
- entityId
318332
- prepopulated
319333
assessmentAttributeDetail:
@@ -333,7 +347,6 @@ components:
333347
asked:
334348
type: boolean
335349
required:
336-
- id
337350
- attributeId
338351
assessmentRelationshipDetail:
339352
type: object

assessment-service/src/integrationTest/java/uk/gov/laa/ccms/caab/assessment/controller/BaseAssessmentControllerIntegrationTest.java

+22-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
import static org.junit.jupiter.api.Assertions.assertNotNull;
66
import static org.junit.jupiter.api.Assertions.assertNull;
77
import static org.junit.jupiter.api.Assertions.assertTrue;
8+
import static uk.gov.laa.ccms.caab.assessment.audit.AuditorAwareImpl.currentUserHolder;
89

910
import jakarta.transaction.Transactional;
1011
import java.util.List;
1112
import java.util.stream.Stream;
12-
import javax.management.relation.Relation;
13+
import org.junit.jupiter.api.BeforeEach;
1314
import org.junit.jupiter.api.Test;
1415
import org.junit.jupiter.params.ParameterizedTest;
1516
import org.junit.jupiter.params.provider.Arguments;
@@ -32,6 +33,24 @@ public abstract class BaseAssessmentControllerIntegrationTest {
3233
@Autowired
3334
private AssessmentController assessmentController;
3435

36+
protected final String caabUserLoginId = "[email protected]";
37+
38+
@BeforeEach
39+
public void setup() {
40+
currentUserHolder.set(caabUserLoginId);
41+
}
42+
43+
@Test
44+
@Transactional
45+
public void testCreateAssessment_expect201() {
46+
47+
AssessmentDetail assessment = buildAssessmentDetail();
48+
ResponseEntity<Void> response =
49+
assessmentController.createAssessment(caabUserLoginId, assessment);
50+
51+
assertEquals(HttpStatus.CREATED, response.getStatusCode());
52+
}
53+
3554
//get by id expect 200
3655
@Test
3756
@Sql(scripts = "/sql/assessments_insert.sql")
@@ -189,11 +208,12 @@ private static Stream<Arguments> updateAssessmentArguments_base() {
189208
@Sql(scripts = "/sql/assessments_insert.sql")
190209
@Transactional
191210
public void testUpdateAssessment() {
211+
final Long assessmentId = 26L;
192212
final String loginId = "testUser";
193213

194214
AssessmentDetail expected = buildAssessmentDetail();
195215

196-
ResponseEntity<Void> response = assessmentController.updateAssessment(loginId, expected);
216+
ResponseEntity<Void> response = assessmentController.updateAssessment(assessmentId, loginId, expected);
197217
assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode());
198218

199219
ResponseEntity<AssessmentDetail> updatedResponse = assessmentController.getAssessment(expected.getId());

assessment-service/src/main/java/uk/gov/laa/ccms/caab/assessment/controller/AssessmentController.java

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package uk.gov.laa.ccms.caab.assessment.controller;
22

3+
import java.net.URI;
34
import java.util.List;
45
import lombok.RequiredArgsConstructor;
56
import org.springframework.http.HttpStatus;
67
import org.springframework.http.ResponseEntity;
78
import org.springframework.web.bind.annotation.RestController;
9+
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
810
import uk.gov.laa.ccms.caab.assessment.api.AssessmentsApi;
911
import uk.gov.laa.ccms.caab.assessment.model.AssessmentDetail;
1012
import uk.gov.laa.ccms.caab.assessment.model.AssessmentDetails;
@@ -57,6 +59,21 @@ public ResponseEntity<AssessmentDetails> getAssessments(
5759
return ResponseEntity.ok(assessmentService.getAssessments(criteria, name));
5860
}
5961

62+
@Override
63+
public ResponseEntity<Void> createAssessment(
64+
final String caabUserLoginId,
65+
final AssessmentDetail assessment) {
66+
67+
Long assessmentId = assessmentService.createAssessment(assessment);
68+
69+
URI uri = ServletUriComponentsBuilder.fromCurrentRequest()
70+
.path("/{id}")
71+
.buildAndExpand(assessmentId)
72+
.toUri();
73+
74+
return ResponseEntity.created(uri).build();
75+
}
76+
6077
@Override
6178
public ResponseEntity<Void> deleteAssessmentCheckpoint(
6279
final Long assessmentId,
@@ -117,17 +134,22 @@ public ResponseEntity<Void> patchAssessment(
117134
/**
118135
* updates an assessment.
119136
*
137+
* @param assessmentId The ID of the assessment to update.
120138
* @param caabUserLoginId The CAAB user login ID performing the update.
121139
* @param assessment The details to update the assessment with.
122140
* @return ResponseEntity with the status of the update operation.
123141
*/
124142
@Override
125143
public ResponseEntity<Void> updateAssessment(
144+
final Long assessmentId,
126145
final String caabUserLoginId,
127146
final AssessmentDetail assessment) {
128147

129-
assessmentService.updateAssessment(assessment);
148+
assessmentService.updateAssessment(assessmentId, assessment);
130149
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
131150
}
132151

152+
153+
154+
133155
}

assessment-service/src/main/java/uk/gov/laa/ccms/caab/assessment/entity/AuditTrail.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import jakarta.persistence.Column;
44
import jakarta.persistence.Embeddable;
55
import java.util.Date;
6-
import lombok.Data;
6+
import lombok.Getter;
7+
import lombok.Setter;
78
import org.hibernate.annotations.CreationTimestamp;
89
import org.hibernate.annotations.UpdateTimestamp;
910
import org.springframework.data.annotation.CreatedBy;
@@ -13,7 +14,8 @@
1314
* Represents an audit trail for various entities within the CCMS system.
1415
*/
1516
@Embeddable
16-
@Data
17+
@Getter
18+
@Setter
1719
public class AuditTrail {
1820

1921
/**

assessment-service/src/main/java/uk/gov/laa/ccms/caab/assessment/entity/OpaAttribute.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
import jakarta.persistence.ManyToOne;
1111
import jakarta.persistence.SequenceGenerator;
1212
import jakarta.persistence.Table;
13-
import lombok.Data;
13+
import lombok.Getter;
14+
import lombok.Setter;
1415
import org.hibernate.type.NumericBooleanConverter;
1516

1617
/**
@@ -22,7 +23,8 @@
2223
allocationSize = 1,
2324
name = "XXCCMS_OPA_ATTRIBUTE_S",
2425
sequenceName = "XXCCMS_OPA_GENERATED_ID_S")
25-
@Data
26+
@Getter
27+
@Setter
2628
public class OpaAttribute {
2729

2830
/**

0 commit comments

Comments
 (0)