Skip to content

Commit 1d81b0f

Browse files
committed
Refactor project request and response models, update mappings, and add global Jackson configuration
1 parent 8ffa571 commit 1d81b0f

11 files changed

Lines changed: 97 additions & 66 deletions

File tree

api-project/openapi/api-project.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,5 @@ components:
150150
type: string
151151
errorDescription:
152152
type: string
153+
location:
154+
type: string
Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,34 @@
11
package org.opendevstack.apiservice.project.mapper;
22

3+
import org.apache.logging.log4j.util.Strings;
34
import org.mapstruct.Mapper;
45
import org.opendevstack.apiservice.project.model.CreateProjectRequest;
56
import org.opendevstack.apiservice.project.model.CreateProjectResponse;
7+
import org.opendevstack.apiservice.serviceproject.model.ProjectRequest;
8+
import org.opendevstack.apiservice.serviceproject.model.ProjectResponse;
69

710
@Mapper(componentModel = "spring")
811
public interface ProjectMapper {
912

10-
org.opendevstack.apiservice.serviceproject.model.CreateProjectRequest toServiceRequest(
13+
ProjectRequest toServiceRequest(
1114
CreateProjectRequest apiRequest);
12-
13-
CreateProjectResponse toApiResponse(
14-
org.opendevstack.apiservice.serviceproject.model.CreateProjectResponse serviceResponse);
15+
16+
default CreateProjectResponse toApiResponse(ProjectResponse serviceResponse) {
17+
if (serviceResponse == null) {
18+
return null;
19+
}
20+
21+
CreateProjectResponse response = new CreateProjectResponse();
22+
response.setProjectKey(serviceResponse.getProjectKey());
23+
24+
if (!Strings.isEmpty(serviceResponse.getStatus())) {
25+
response.setStatus(serviceResponse.getStatus());
26+
}
27+
28+
if (!Strings.isEmpty(serviceResponse.getProjectKey())) {
29+
response.setLocation("/api/pub/v0/projects/" + serviceResponse.getProjectKey());
30+
}
31+
32+
return response;
33+
}
1534
}

api-project/src/test/java/org/opendevstack/apiservice/project/facade/impl/ProjectsFacadeImplTest.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import org.opendevstack.apiservice.project.mapper.ProjectMapper;
1010
import org.opendevstack.apiservice.project.model.CreateProjectRequest;
1111
import org.opendevstack.apiservice.project.model.CreateProjectResponse;
12+
import org.opendevstack.apiservice.serviceproject.model.ProjectRequest;
13+
import org.opendevstack.apiservice.serviceproject.model.ProjectResponse;
1214
import org.opendevstack.apiservice.serviceproject.service.ProjectService;
1315

1416
import static org.assertj.core.api.Assertions.assertThat;
@@ -35,13 +37,13 @@ void createProject_whenServiceReturnsValue_thenMapToApiModel() throws Exception
3537
CreateProjectRequest request = new CreateProjectRequest("My Project");
3638
request.setProjectKey("PROJ01");
3739

38-
org.opendevstack.apiservice.serviceproject.model.CreateProjectResponse serviceResponse =
39-
new org.opendevstack.apiservice.serviceproject.model.CreateProjectResponse();
40+
ProjectResponse serviceResponse =
41+
new ProjectResponse();
4042
serviceResponse.setProjectKey("PROJ01");
4143
serviceResponse.setStatus("Initiated");
4244

4345
when(projectService.createProject(org.mockito.ArgumentMatchers.any(
44-
org.opendevstack.apiservice.serviceproject.model.CreateProjectRequest.class)))
46+
ProjectRequest.class)))
4547
.thenReturn(serviceResponse);
4648

4749
CreateProjectResponse response = sut.createProject(request);
@@ -50,14 +52,14 @@ void createProject_whenServiceReturnsValue_thenMapToApiModel() throws Exception
5052
assertThat(response.getProjectKey()).isEqualTo("PROJ01");
5153
assertThat(response.getStatus()).isEqualTo("Initiated");
5254
verify(projectService).createProject(org.mockito.ArgumentMatchers.any(
53-
org.opendevstack.apiservice.serviceproject.model.CreateProjectRequest.class));
55+
ProjectRequest.class));
5456
}
5557

5658
@Test
5759
void createProject_whenServiceReturnsNull_thenReturnNull() throws Exception {
5860
CreateProjectRequest request = new CreateProjectRequest("My Project");
5961
when(projectService.createProject(org.mockito.ArgumentMatchers.any(
60-
org.opendevstack.apiservice.serviceproject.model.CreateProjectRequest.class)))
62+
ProjectRequest.class)))
6163
.thenReturn(null);
6264

6365
CreateProjectResponse response = sut.createProject(request);
@@ -67,8 +69,8 @@ void createProject_whenServiceReturnsNull_thenReturnNull() throws Exception {
6769

6870
@Test
6971
void getProject_whenServiceReturnsValue_thenMapToApiModel() throws Exception {
70-
org.opendevstack.apiservice.serviceproject.model.CreateProjectResponse serviceResponse =
71-
new org.opendevstack.apiservice.serviceproject.model.CreateProjectResponse();
72+
ProjectResponse serviceResponse =
73+
new ProjectResponse();
7274
serviceResponse.setProjectKey("PROJ01");
7375
serviceResponse.setStatus("Found");
7476

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.opendevstack.apiservice.core.config;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
8+
/**
9+
* Global Jackson configuration.
10+
* Ensures that null properties are omitted from all JSON responses.
11+
*/
12+
@Configuration
13+
public class JacksonConfig {
14+
15+
@Bean
16+
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
17+
return builder -> builder.serializationInclusion(JsonInclude.Include.NON_NULL);
18+
}
19+
}
20+
21+

service-projects/src/main/java/org/opendevstack/apiservice/serviceproject/mapper/CreateProjectResponseMapper.java

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.opendevstack.apiservice.serviceproject.mapper;
2+
3+
import org.mapstruct.Mapper;
4+
import org.opendevstack.apiservice.persistence.entity.ProjectEntity;
5+
import org.opendevstack.apiservice.serviceproject.model.ProjectResponse;
6+
7+
@Mapper(componentModel = "spring")
8+
public interface ProjectResponseMapper {
9+
10+
ProjectResponse toCreateProjectResponse(ProjectEntity entity);
11+
}

service-projects/src/main/java/org/opendevstack/apiservice/serviceproject/model/CreateProjectRequest.java renamed to service-projects/src/main/java/org/opendevstack/apiservice/serviceproject/model/ProjectRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
@Data
88
@NoArgsConstructor
99
@AllArgsConstructor
10-
public class CreateProjectRequest {
10+
public class ProjectRequest {
1111

1212
private String projectKey;
1313

service-projects/src/main/java/org/opendevstack/apiservice/serviceproject/model/CreateProjectResponse.java renamed to service-projects/src/main/java/org/opendevstack/apiservice/serviceproject/model/ProjectResponse.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,9 @@
99
@NoArgsConstructor
1010
@AllArgsConstructor
1111
@Builder
12-
public class CreateProjectResponse {
12+
public class ProjectResponse {
1313

1414
private String projectKey;
1515

1616
private String status;
17-
18-
private String message;
19-
20-
private String error;
21-
22-
private String errorKey;
23-
24-
private String errorDescription;
2517
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package org.opendevstack.apiservice.serviceproject.service;
22

3-
import org.opendevstack.apiservice.serviceproject.model.CreateProjectRequest;
4-
import org.opendevstack.apiservice.serviceproject.model.CreateProjectResponse;
3+
import org.opendevstack.apiservice.serviceproject.model.ProjectRequest;
4+
import org.opendevstack.apiservice.serviceproject.model.ProjectResponse;
55

66
public interface ProjectService {
77

8-
CreateProjectResponse createProject(CreateProjectRequest request);
8+
ProjectResponse createProject(ProjectRequest request);
99

10-
CreateProjectResponse getProject(String projectKey);
10+
ProjectResponse getProject(String projectKey);
1111
}
1212

service-projects/src/main/java/org/opendevstack/apiservice/serviceproject/service/impl/ProjectServiceImpl.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import org.opendevstack.apiservice.externalservice.ocp.service.OpenshiftService;
88
import org.opendevstack.apiservice.persistence.entity.ProjectEntity;
99
import org.opendevstack.apiservice.persistence.repository.ProjectRepository;
10-
import org.opendevstack.apiservice.serviceproject.mapper.CreateProjectResponseMapper;
11-
import org.opendevstack.apiservice.serviceproject.model.CreateProjectRequest;
12-
import org.opendevstack.apiservice.serviceproject.model.CreateProjectResponse;
10+
import org.opendevstack.apiservice.serviceproject.mapper.ProjectResponseMapper;
11+
import org.opendevstack.apiservice.serviceproject.model.ProjectRequest;
12+
import org.opendevstack.apiservice.serviceproject.model.ProjectResponse;
1313
import org.opendevstack.apiservice.serviceproject.service.GenerateProjectKeyService;
1414
import org.opendevstack.apiservice.serviceproject.service.ProjectService;
1515
import org.springframework.stereotype.Service;
@@ -31,19 +31,19 @@ public class ProjectServiceImpl implements ProjectService {
3131

3232
private final ProjectRepository projectRepository;
3333

34-
private final CreateProjectResponseMapper createProjectResponseMapper;
34+
private final ProjectResponseMapper projectResponseMapper;
3535

3636
@Override
37-
public CreateProjectResponse createProject(CreateProjectRequest request) {
38-
return CreateProjectResponse.builder().build();
37+
public ProjectResponse createProject(ProjectRequest request) {
38+
return ProjectResponse.builder().build();
3939
}
4040

4141
@Override
42-
public CreateProjectResponse getProject(String projectKey) {
42+
public ProjectResponse getProject(String projectKey) {
4343
Optional<ProjectEntity> project = projectRepository.findByProjectKey(projectKey);
4444

4545
if (project.isPresent()) {
46-
return createProjectResponseMapper.toCreateProjectResponse(project.get());
46+
return projectResponseMapper.toCreateProjectResponse(project.get());
4747
}
4848

4949
return null;

0 commit comments

Comments
 (0)