Skip to content

Commit bb4ba0b

Browse files
committed
IPTE-165: Refactoring ProjectController and Transfer ProjectColorDTO to a other Packages
1 parent 36b93e7 commit bb4ba0b

File tree

6 files changed

+94
-75
lines changed

6 files changed

+94
-75
lines changed

src/main/java/de/doubleslash/keeptime/REST_API/ProjectColorDTO.java renamed to src/main/java/de/doubleslash/keeptime/REST_API/DTO/ProjectColorDTO.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package de.doubleslash.keeptime.REST_API;
1+
package de.doubleslash.keeptime.REST_API.DTO;
22

33
import de.doubleslash.keeptime.REST_API.DTO.ColorDTO;
44

55
public class ProjectColorDTO {
6-
6+
private long id;
77
private String name;
88
private String description;
99
private ColorDTO color;
@@ -12,7 +12,9 @@ public class ProjectColorDTO {
1212
private boolean isEnabled;
1313
private int index;
1414

15-
public ProjectColorDTO(String name, String description, ColorDTO color, boolean isWork, int index, boolean isDefault) {
15+
16+
public ProjectColorDTO( long id, String name, String description, ColorDTO color, boolean isWork, int index, boolean isDefault) {
17+
this.id= id;
1618
this.name = name;
1719
this.description = description;
1820
this.color = color;
@@ -22,6 +24,14 @@ public ProjectColorDTO(String name, String description, ColorDTO color, boolean
2224
this.isEnabled = true;
2325
}
2426

27+
public long getId() {
28+
return id;
29+
}
30+
31+
public void setId(final long id) {
32+
this.id = id;
33+
}
34+
2535
public String getName() {
2636
return name;
2737
}
@@ -77,4 +87,6 @@ public int getIndex() {
7787
public void setIndex(int index) {
7888
this.index = index;
7989
}
90+
91+
8092
}
Lines changed: 76 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package de.doubleslash.keeptime.REST_API.controller;
22

3-
import de.doubleslash.keeptime.REST_API.ProjectColorDTO;
3+
import de.doubleslash.keeptime.REST_API.DTO.ProjectColorDTO;
4+
import de.doubleslash.keeptime.REST_API.DTO.WorkDTO;
45
import de.doubleslash.keeptime.REST_API.mapper.ProjectMapper;
6+
import de.doubleslash.keeptime.REST_API.mapper.WorkMapper;
57
import de.doubleslash.keeptime.controller.Controller;
68
import de.doubleslash.keeptime.model.Model;
79
import de.doubleslash.keeptime.model.Project;
810
import de.doubleslash.keeptime.model.Work;
911
import de.doubleslash.keeptime.model.repos.ProjectRepository;
1012
import de.doubleslash.keeptime.model.repos.WorkRepository;
13+
import org.springframework.dao.DataAccessException;
1114
import org.springframework.http.HttpStatus;
1215
import org.springframework.http.ResponseEntity;
1316
import org.springframework.web.bind.annotation.*;
@@ -24,11 +27,8 @@ public class ProjectController {
2427
private ProjectRepository projectRepository;
2528
private WorkRepository workRepository;
2629
private Controller controller;
27-
2830
private Model model;
2931

30-
private ProjectMapper projectMapper;
31-
3232
public ProjectController(final ProjectRepository projectRepository, final WorkRepository workRepository,
3333
final Controller controller, Model model) {
3434
this.projectRepository = projectRepository;
@@ -47,113 +47,122 @@ public ResponseEntity<List<ProjectColorDTO>> getProjectColorDTOsByName(
4747
} else {
4848
projects = projectRepository.findAll();
4949
}
50-
5150
List<ProjectColorDTO> projectColorDTOs = projects.stream()
5251
.map(ProjectMapper.INSTANCE::projectToProjectDTO)
5352
.collect(Collectors.toList());
54-
5553
return ResponseEntity.ok(projectColorDTOs);
5654
}
5755

5856
@GetMapping("/{id}")
59-
public @Valid Project getProjectById(@PathVariable final long id) {
57+
public @Valid ProjectColorDTO getProjectById(@PathVariable final long id) {
6058
final Optional<Project> project = projectRepository.findById(id);
6159

6260
if (project.isEmpty()) {
6361
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Project with id '" + id + "' not found");
6462
}
65-
66-
return project.get();
63+
return ProjectMapper.INSTANCE.projectToProjectDTO(project.get());
6764
}
6865

6966
@GetMapping("/{id}/works")
70-
public List<Work> getWorksFromProject(@PathVariable final long id) {
71-
return workRepository.findAll()
72-
.stream()
73-
.filter(work -> work.getProject().getId() == id)
74-
.collect(Collectors.toList());
67+
public List<WorkDTO> getWorksFromProject(@PathVariable final long id) {
68+
return workRepository.findAll().stream().filter(work -> {
69+
Project project = work.getProject();
70+
return project != null && project.getId() == id;
71+
}).map(work -> WorkMapper.INSTANCE.workToWorkDTO(work)).collect(Collectors.toList());
7572
}
7673

7774
@GetMapping("/{projectId}/works/{workId}")
78-
public Work getWorkByIdFromProject(@PathVariable final long projectId, @PathVariable final long workId) {
75+
public WorkDTO getWorkByIdFromProject(@PathVariable final long projectId, @PathVariable final long workId) {
7976
return workRepository.findAll()
8077
.stream()
81-
.filter(work -> work.getProject().getId() == projectId && work.getId() == workId)
82-
.reduce((a, b) -> {
83-
throw new IllegalStateException("Multiple elements: " + a + ", " + b);
78+
.filter(work -> {
79+
Project project = work.getProject();
80+
return project != null && project.getId() == projectId && work.getId() == workId;
8481
})
82+
.findFirst()
83+
.map(WorkMapper.INSTANCE::workToWorkDTO)
8584
.orElseThrow(() -> new ResourceNotFoundException(
8685
"Work with id '" + workId + "' related to project with id '" + projectId
8786
+ "' not found"));
8887
}
8988

9089
@PostMapping("")
91-
public @Valid Project createProject(@Valid @RequestBody final Project project) {
92-
controller.addNewProject(project);
93-
return project;
90+
public ResponseEntity<ProjectColorDTO> createProject(@Valid @RequestBody final ProjectColorDTO newProjectDTO) {
91+
try {
92+
Project newProject = ProjectMapper.INSTANCE.projectDTOToProject(newProjectDTO);
93+
94+
controller.addNewProject(newProject);
95+
96+
model.getProjectRepository().save(newProject);
97+
98+
ProjectColorDTO projectDTO = ProjectMapper.INSTANCE.projectToProjectDTO(newProject);
99+
100+
return ResponseEntity.status(HttpStatus.CREATED).body(projectDTO);
101+
} catch (Exception e) {
102+
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
103+
}
94104
}
95105

96-
//@PutMapping("/{id}")
97-
//public ResponseEntity<ProjectColorDTO> updateProjectColorDTO(@PathVariable final long id,
98-
// @Valid @RequestBody final ProjectColorDTO newValuedProjectDTO) {
99-
// final Project updateProject = getProjectById(id);
100-
//
101-
// Project newValuedProject = ProjectMapper.INSTANCE.projectDTOToProject(newValuedProjectDTO);
102-
//
103-
// updateProject.setName(newValuedProject.getName());
104-
// updateProject.setDescription(newValuedProject.getDescription());
105-
// updateProject.setIndex(newValuedProject.getIndex());
106-
// updateProject.setWork(newValuedProject.isWork());
107-
//
108-
// updateProject.setDefault(newValuedProject.isDefault());
109-
// updateProject.setEnabled(newValuedProject.isEnabled());
110-
//
111-
// projectRepository.save(updateProject);
112-
//
113-
// ProjectColorDTO updatedProjectDTO = ProjectMapper.INSTANCE.projectToProjectDTO(updateProject);
114-
//
115-
// return ResponseEntity.ok(updatedProjectDTO);
116-
//}
117106
@PutMapping("/{id}")
118107
public ResponseEntity<ProjectColorDTO> updateProjectColorDTO(@PathVariable final long id,
119108
@Valid @RequestBody final ProjectColorDTO newValuedProjectDTO) {
120109
try {
121-
final Project updateProject = getProjectById(id);
110+
Optional<Project> optionalProject = projectRepository.findById(id);
111+
112+
if (optionalProject.isEmpty()) {
113+
return ResponseEntity.notFound().build();
114+
}
122115

116+
Project existingProject = optionalProject.get();
123117
Project newValuedProject = ProjectMapper.INSTANCE.projectDTOToProject(newValuedProjectDTO);
124118

125-
updateProject.setName(newValuedProject.getName());
126-
updateProject.setDescription(newValuedProject.getDescription());
127-
updateProject.setIndex(newValuedProject.getIndex());
128-
updateProject.setWork(newValuedProject.isWork());
129-
updateProject.setColor(newValuedProject.getColor());
130-
updateProject.setDefault(newValuedProject.isDefault());
131-
updateProject.setEnabled(newValuedProject.isEnabled());
119+
existingProject.setName(newValuedProject.getName());
120+
existingProject.setDescription(newValuedProject.getDescription());
121+
existingProject.setIndex(newValuedProject.getIndex());
122+
existingProject.setWork(newValuedProject.isWork());
123+
existingProject.setColor(newValuedProject.getColor());
124+
existingProject.setDefault(newValuedProject.isDefault());
125+
existingProject.setEnabled(newValuedProject.isEnabled());
132126

133-
projectRepository.save(updateProject);
127+
projectRepository.save(existingProject);
134128

135-
ProjectColorDTO updatedProjectDTO = ProjectMapper.INSTANCE.projectToProjectDTO(updateProject);
129+
ProjectColorDTO updatedProjectDTO = ProjectMapper.INSTANCE.projectToProjectDTO(existingProject);
136130

137131
return ResponseEntity.ok(updatedProjectDTO);
138-
} catch (Exception e) {
139-
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
132+
} catch (DataAccessException e) {
133+
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
140134
}
141135
}
142136

143137
@PostMapping("/{id}/works")
144-
public @Valid Work createWorkInProject(@PathVariable final long id, @Valid @RequestBody final Work work) {
145-
work.setProject(getProjectById(id));
146-
workRepository.save(work);
138+
public ResponseEntity<WorkDTO> createWorkInProject(@PathVariable final long id,
139+
@Valid @RequestBody final Work work) {
140+
Optional<Project> projectOptional = projectRepository.findById(id);
147141

148-
return work;
142+
if (projectOptional.isPresent()) {
143+
Project project = projectOptional.get();
144+
work.setProject(project);
145+
workRepository.save(work);
146+
147+
WorkDTO workDTO = WorkMapper.INSTANCE.workToWorkDTO(work);
148+
149+
return ResponseEntity.status(HttpStatus.CREATED).body(workDTO);
150+
} else {
151+
return ResponseEntity.notFound().build();
152+
}
149153
}
150154

151155
@DeleteMapping("/{id}")
152156
public ResponseEntity<String> deleteProject(@PathVariable final long id) {
153-
Project project = getProjectById(id);
154-
if (project == null) {
157+
Optional<Project> projectOptional = projectRepository.findById(id);
158+
159+
if (!projectOptional.isPresent()) {
155160
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Project with the ID '" + id + "' not found");
156-
} else if (project.isDefault()) {
161+
}
162+
163+
Project project = projectOptional.get();
164+
165+
if (project.isDefault()) {
157166
return new ResponseEntity<>("Project cannot be deleted as it is the default", HttpStatus.BAD_REQUEST);
158167
} else {
159168
controller.deleteProject(project);
@@ -163,16 +172,17 @@ public ResponseEntity<String> deleteProject(@PathVariable final long id) {
163172
}
164173

165174
@GetMapping("/current")
166-
public Project getWorkProjects() {
167-
Project workProjects = model.activeWorkItem.get().getProject();
168-
return workProjects;
175+
public ProjectColorDTO getWorkProjects() {
176+
Project project = model.activeWorkItem.get().getProject();
177+
return ProjectMapper.INSTANCE.projectToProjectDTO(project);
169178
}
170179

171180
@PutMapping("/current")
172-
public ResponseEntity<Project> changeProject(@Valid @RequestBody Project newProject) {
181+
public ResponseEntity<ProjectColorDTO> changeProject(@Valid @RequestBody Project newProject) {
173182
try {
174183
controller.changeProject(newProject);
175-
return ResponseEntity.ok(newProject);
184+
ProjectColorDTO projectDTO = ProjectMapper.INSTANCE.projectToProjectDTO(newProject);
185+
return ResponseEntity.ok(projectDTO);
176186
} catch (Exception e) {
177187
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
178188
}
@@ -184,5 +194,4 @@ public ResourceNotFoundException(String message) {
184194
super(message);
185195
}
186196
}
187-
188197
}

src/main/java/de/doubleslash/keeptime/REST_API/controller/WorksController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ public List<WorkDTO> getWorks(@RequestParam(name = "name", required = false) fin
4545
if (projectName != null) {
4646
workStream = workStream.filter(work -> work.getProject().getName().equals(projectName));
4747
}
48-
4948
return workStream.map(WorkMapper.INSTANCE::workToWorkDTO).collect(Collectors.toList());
5049
}
5150

@@ -82,7 +81,7 @@ public ResponseEntity<String> deleteWork(@PathVariable final long id) {
8281
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Work with the ID " + id + " not found");
8382
}
8483
}
85-
84+
8685
@GetMapping("/current")
8786
public ResponseEntity<WorkDTO> getCurrentWork() {
8887
Work workProjects = model.activeWorkItem.get();

src/main/java/de/doubleslash/keeptime/REST_API/mapper/ProjectMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package de.doubleslash.keeptime.REST_API.mapper;
22

3-
import de.doubleslash.keeptime.REST_API.ProjectColorDTO;
3+
import de.doubleslash.keeptime.REST_API.DTO.ProjectColorDTO;
44
import de.doubleslash.keeptime.model.Project;
55
import org.mapstruct.Mapper;
66
import org.mapstruct.factory.Mappers;

src/main/java/de/doubleslash/keeptime/controller/Controller.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.time.LocalDateTime;
2222
import java.util.ArrayList;
2323
import java.util.List;
24-
import java.util.Optional;
2524

2625
import javax.annotation.PreDestroy;
2726

src/test/java/de/doubleslash/keeptime/REST_API/controller/ProjectMapperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package de.doubleslash.keeptime.REST_API.controller;
22

3-
import de.doubleslash.keeptime.REST_API.ProjectColorDTO;
3+
import de.doubleslash.keeptime.REST_API.DTO.ProjectColorDTO;
44
import de.doubleslash.keeptime.REST_API.mapper.ProjectMapper;
55
import de.doubleslash.keeptime.model.Project;
66
import javafx.scene.paint.Color;

0 commit comments

Comments
 (0)