Skip to content

Commit 8679696

Browse files
authored
Revert "Chore/project service (#9)"
This reverts commit 8f7c7fa.
1 parent 8f7c7fa commit 8679696

30 files changed

Lines changed: 120 additions & 785 deletions

File tree

api-project/openapi/api-project.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,6 @@ components:
142142
type: string
143143
status:
144144
type: string
145-
projectFlavor:
146-
type: string
147145
message:
148146
type: string
149147
error:
@@ -152,5 +150,3 @@ components:
152150
type: string
153151
errorDescription:
154152
type: string
155-
location:
156-
type: string

api-project/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
<dependency>
7575
<groupId>org.mapstruct</groupId>
7676
<artifactId>mapstruct</artifactId>
77-
<version>${mapstruct.version}</version>
77+
<version>1.6.3</version>
7878
</dependency>
7979

8080
<dependency>
@@ -111,7 +111,7 @@
111111
<path>
112112
<groupId>org.mapstruct</groupId>
113113
<artifactId>mapstruct-processor</artifactId>
114-
<version>${mapstruct.version}</version>
114+
<version>1.6.3</version>
115115
</path>
116116
</annotationProcessorPaths>
117117
</configuration>

api-project/src/main/java/org/opendevstack/apiservice/project/controller/ProjectController.java

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,51 +26,38 @@ public class ProjectController implements ProjectsApi {
2626

2727
public static final String API_BASE_PATH = "/api/pub/v0/projects";
2828

29-
private static final String HTTP_HEADER_LOCATION = "Location";
30-
3129
private final ProjectsFacade projectsFacade;
3230

3331
@PostMapping
3432
@Override
3533
public ResponseEntity<CreateProjectResponse> createProject(@Valid @RequestBody CreateProjectRequest createProjectRequest) {
3634
try {
37-
return ResponseEntity
38-
.status(HttpStatus.OK)
39-
.header(HTTP_HEADER_LOCATION, API_BASE_PATH)
40-
.body(projectsFacade.createProject(createProjectRequest));
35+
return ResponseEntity.ok(projectsFacade.createProject(createProjectRequest));
4136
} catch (ProjectCreationException e) {
4237
log.error("Project creation conflict: {}", e.getMessage());
4338
return ResponseEntity.status(HttpStatus.CONFLICT)
44-
.header(HTTP_HEADER_LOCATION, API_BASE_PATH)
45-
.body(ProjectResponseFactory.conflict(e.getMessage(), API_BASE_PATH));
39+
.body(ProjectResponseFactory.conflict(e.getMessage()));
4640
} catch (ProjectKeyGenerationException e) {
4741
log.error("Failed to generate project key: {}", e.getMessage(), e);
4842
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
49-
.header(HTTP_HEADER_LOCATION, API_BASE_PATH)
50-
.body(ProjectResponseFactory.projectKeyGenerationFailed(API_BASE_PATH));
43+
.body(ProjectResponseFactory.projectKeyGenerationFailed());
5144
}
5245
}
5346

5447
@GetMapping("/{projectKey}")
5548
@Override
5649
public ResponseEntity<CreateProjectResponse> getProject(@PathVariable String projectKey) {
57-
String location = API_BASE_PATH + "/" + projectKey;
5850
try {
5951
CreateProjectResponse response = projectsFacade.getProject(projectKey);
6052
if (response == null) {
6153
return ResponseEntity.status(HttpStatus.NOT_FOUND)
62-
.header(HTTP_HEADER_LOCATION, location)
63-
.body(ProjectResponseFactory.notFound(projectKey, location));
54+
.body(ProjectResponseFactory.notFound(projectKey));
6455
}
65-
return ResponseEntity
66-
.status(HttpStatus.OK)
67-
.header(HTTP_HEADER_LOCATION, location)
68-
.body(response);
69-
} catch (Exception e) {
70-
log.error("Unexpected error retrieving project '{}': {}", projectKey, e.getMessage(), e);
56+
return ResponseEntity.ok(response);
57+
} catch (ProjectCreationException e) {
58+
log.error("Error retrieving project '{}': {}", projectKey, e.getMessage(), e);
7159
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
72-
.header(HTTP_HEADER_LOCATION, location)
73-
.body(ProjectResponseFactory.internalError(location));
60+
.body(ProjectResponseFactory.internalError());
7461
}
7562
}
7663
}
Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,38 @@
11
package org.opendevstack.apiservice.project.controller;
22

3-
import org.opendevstack.apiservice.project.exception.ErrorKey;
43
import org.opendevstack.apiservice.project.model.CreateProjectResponse;
54

65
public final class ProjectResponseFactory {
76

7+
private static final String INTERNAL_ERROR = "INTERNAL_ERROR";
8+
89
private ProjectResponseFactory() {
910
}
1011

11-
public static CreateProjectResponse conflict(String message, String location) {
12-
return error(
13-
ErrorKey.PROJECT_ALREADY_EXISTS.getMessage(),
14-
ErrorKey.PROJECT_ALREADY_EXISTS.getKey(),
15-
message, location);
12+
public static CreateProjectResponse conflict(String message) {
13+
return error("CONFLICT", "PROJECT_ALREADY_EXISTS", message);
1614
}
1715

18-
public static CreateProjectResponse projectKeyGenerationFailed(String location) {
19-
return error(ErrorKey.INTERNAL_ERROR.getMessage(),
20-
"PROJECT_KEY_GENERATION_FAILED",
21-
"Failed to generate a unique project key.",
22-
location);
16+
public static CreateProjectResponse projectKeyGenerationFailed() {
17+
return error(INTERNAL_ERROR, "PROJECT_KEY_GENERATION_FAILED",
18+
"Failed to generate a unique project key.");
2319
}
2420

25-
public static CreateProjectResponse notFound(String projectKey, String location) {
26-
return error(
27-
ErrorKey.PROJECT_NOT_FOUND.getMessage(),
28-
ErrorKey.PROJECT_NOT_FOUND.getKey(),
29-
String.format("Project with key '%s' not found", projectKey),
30-
location
31-
);
21+
public static CreateProjectResponse notFound(String projectKey) {
22+
return error("NOT_FOUND", "PROJECT_NOT_FOUND",
23+
String.format("Project with key '%s' not found", projectKey));
3224
}
3325

34-
public static CreateProjectResponse internalError(String location) {
35-
return error(
36-
ErrorKey.INTERNAL_ERROR.getMessage(),
37-
ErrorKey.INTERNAL_ERROR.getKey(),
38-
"An error occurred while processing the request.",
39-
location);
26+
public static CreateProjectResponse internalError() {
27+
return error(INTERNAL_ERROR, INTERNAL_ERROR,
28+
"An error occurred while processing the request.");
4029
}
4130

42-
private static CreateProjectResponse error(String error, String errorKey, String message, String location) {
31+
private static CreateProjectResponse error(String error, String errorKey, String message) {
4332
CreateProjectResponse response = new CreateProjectResponse();
4433
response.setError(error);
4534
response.setErrorKey(errorKey);
4635
response.setMessage(message);
47-
response.setLocation(location);
4836
return response;
4937
}
5038
}

api-project/src/main/java/org/opendevstack/apiservice/project/exception/ErrorKey.java

Lines changed: 0 additions & 48 deletions
This file was deleted.

api-project/src/main/java/org/opendevstack/apiservice/project/exception/ErrorMessage.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

api-project/src/main/java/org/opendevstack/apiservice/project/facade/ProjectsFacade.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ public interface ProjectsFacade {
1010
CreateProjectResponse createProject(CreateProjectRequest request)
1111
throws ProjectCreationException, ProjectKeyGenerationException;
1212

13-
CreateProjectResponse getProject(String projectKey);
13+
CreateProjectResponse getProject(String projectKey) throws ProjectCreationException;
1414
}

api-project/src/main/java/org/opendevstack/apiservice/project/facade/impl/ProjectsFacadeImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public CreateProjectResponse createProject(CreateProjectRequest request)
2929
}
3030

3131
@Override
32-
public CreateProjectResponse getProject(String projectKey) {
32+
public CreateProjectResponse getProject(String projectKey) throws ProjectCreationException {
3333
return projectMapper.toApiResponse(projectService.getProject(projectKey));
3434
}
3535
}
Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,15 @@
11
package org.opendevstack.apiservice.project.mapper;
22

33
import org.mapstruct.Mapper;
4-
import org.mapstruct.Mapping;
5-
import org.mapstruct.Named;
64
import org.opendevstack.apiservice.project.model.CreateProjectRequest;
75
import org.opendevstack.apiservice.project.model.CreateProjectResponse;
8-
import org.opendevstack.apiservice.serviceproject.model.ProjectRequest;
9-
import org.opendevstack.apiservice.serviceproject.model.ProjectResponse;
10-
import org.opendevstack.apiservice.serviceproject.model.Status;
11-
12-
import java.text.MessageFormat;
136

147
@Mapper(componentModel = "spring")
158
public interface ProjectMapper {
16-
17-
ProjectRequest toServiceRequest(CreateProjectRequest apiRequest);
18-
19-
@Mapping(source = "status", target = "status", qualifiedByName = "mapStatus")
20-
@Mapping(source = "projectKey", target = "location", qualifiedByName = "mapLocation")
21-
@Mapping(source = ".", target = "errorDescription", qualifiedByName = "mapErrorDescription")
22-
CreateProjectResponse toApiResponse(ProjectResponse serviceResponse);
23-
24-
@Named("mapStatus")
25-
default String mapStatus(Status status) {
26-
if (status == null) {
27-
return null;
28-
}
29-
return status.getDbValue();
30-
}
31-
32-
@Named("mapErrorDescription")
33-
default String mapErrorDescription(ProjectResponse serviceResponse) {
34-
return (serviceResponse.getStatus() == Status.FAILED)
35-
? MessageFormat.format(
36-
"There was an error when creating the project {0}.\n\n " +
37-
"The error has been reported to our Support team as an incident. " +
38-
"You will be informed about the incident via email.", serviceResponse.getProjectKey())
39-
: null;
40-
}
41-
42-
@Named("mapLocation")
43-
default String mapLocation(String projectKey) {
44-
if (projectKey == null || projectKey.isEmpty()) {
45-
return null;
46-
}
47-
return "/api/pub/v0/projects/" + projectKey;
48-
}
9+
10+
org.opendevstack.apiservice.serviceproject.model.CreateProjectRequest toServiceRequest(
11+
CreateProjectRequest apiRequest);
12+
13+
CreateProjectResponse toApiResponse(
14+
org.opendevstack.apiservice.serviceproject.model.CreateProjectResponse serviceResponse);
4915
}

api-project/src/test/java/org/opendevstack/apiservice/project/controller/ProjectControllerTest.java

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ void createProject_whenSuccess_thenReturnOk() throws Exception {
5151
assertThat(result.getBody()).isNotNull();
5252
assertThat(result.getBody().getProjectKey()).isEqualTo("PROJ01");
5353
assertThat(result.getBody().getStatus()).isEqualTo("Initiated");
54-
assertThat(result.getBody().getError()).isNull();
55-
assertThat(result.getBody().getErrorKey()).isNull();
56-
assertThat(result.getBody().getErrorDescription()).isNull();
5754
}
5855

5956
@Test
@@ -68,12 +65,9 @@ void createProject_whenProjectCreationException_thenReturnConflict() throws Exce
6865

6966
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.CONFLICT);
7067
assertThat(result.getBody()).isNotNull();
71-
assertThat(result.getBody().getError()).isEqualTo("Project already exists");
72-
assertThat(result.getBody().getErrorKey()).isEqualTo("025");
73-
assertThat(result.getBody().getMessage()).contains("Project with key 'EXISTING' already exists");
74-
assertThat(result.getBody().getProjectKey()).isNull();
75-
assertThat(result.getBody().getStatus()).isNull();
76-
assertThat(result.getBody().getErrorDescription()).isNull();
68+
assertThat(result.getBody().getError()).isEqualTo("CONFLICT");
69+
assertThat(result.getBody().getErrorKey()).isEqualTo("PROJECT_ALREADY_EXISTS");
70+
assertThat(result.getBody().getMessage()).contains("already exists");
7771
}
7872

7973
@Test
@@ -87,12 +81,9 @@ void createProject_whenProjectKeyGenerationException_thenReturnInternalServerErr
8781

8882
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
8983
assertThat(result.getBody()).isNotNull();
90-
assertThat(result.getBody().getError()).isEqualTo("Internal error");
84+
assertThat(result.getBody().getError()).isEqualTo("INTERNAL_ERROR");
9185
assertThat(result.getBody().getErrorKey()).isEqualTo("PROJECT_KEY_GENERATION_FAILED");
9286
assertThat(result.getBody().getMessage()).isEqualTo("Failed to generate a unique project key.");
93-
assertThat(result.getBody().getProjectKey()).isNull();
94-
assertThat(result.getBody().getStatus()).isNull();
95-
assertThat(result.getBody().getErrorDescription()).isNull();
9687
}
9788

9889
@Test
@@ -108,8 +99,6 @@ void getProject_whenFound_thenReturnOk() throws Exception {
10899
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK);
109100
assertThat(result.getBody()).isNotNull();
110101
assertThat(result.getBody().getProjectKey()).isEqualTo("PROJ01");
111-
assertThat(result.getBody().getError()).isNull();
112-
assertThat(result.getBody().getErrorKey()).isNull();
113102
verify(projectsFacade).getProject("PROJ01");
114103
}
115104

@@ -121,29 +110,23 @@ void getProject_whenNotFound_thenReturnNotFound() throws Exception {
121110

122111
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
123112
assertThat(result.getBody()).isNotNull();
124-
assertThat(result.getBody().getError()).isEqualTo("Not Found");
125-
assertThat(result.getBody().getErrorKey()).isEqualTo("012");
113+
assertThat(result.getBody().getError()).isEqualTo("NOT_FOUND");
114+
assertThat(result.getBody().getErrorKey()).isEqualTo("PROJECT_NOT_FOUND");
126115
assertThat(result.getBody().getMessage()).contains("UNKNOWN");
127-
assertThat(result.getBody().getProjectKey()).isNull();
128-
assertThat(result.getBody().getStatus()).isNull();
129-
assertThat(result.getBody().getErrorDescription()).isNull();
130116
}
131117

132118
@Test
133119
void getProject_whenServiceThrows_thenReturnInternalServerError() throws Exception {
134120
when(projectsFacade.getProject(anyString()))
135-
.thenThrow(new RuntimeException("Database error"));
121+
.thenThrow(new ProjectCreationException("Database error"));
136122

137123
ResponseEntity<CreateProjectResponse> result = sut.getProject("PROJ01");
138124

139125
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
140126
assertThat(result.getBody()).isNotNull();
141-
assertThat(result.getBody().getError()).isEqualTo("Internal error");
142-
assertThat(result.getBody().getErrorKey()).isEqualTo("003");
127+
assertThat(result.getBody().getError()).isEqualTo("INTERNAL_ERROR");
128+
assertThat(result.getBody().getErrorKey()).isEqualTo("INTERNAL_ERROR");
143129
assertThat(result.getBody().getMessage()).isEqualTo("An error occurred while processing the request.");
144-
assertThat(result.getBody().getProjectKey()).isNull();
145-
assertThat(result.getBody().getStatus()).isNull();
146-
assertThat(result.getBody().getErrorDescription()).isNull();
147130
}
148131

149132
}

0 commit comments

Comments
 (0)