11package 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 ;
45import de .doubleslash .keeptime .REST_API .mapper .ProjectMapper ;
6+ import de .doubleslash .keeptime .REST_API .mapper .WorkMapper ;
57import de .doubleslash .keeptime .controller .Controller ;
68import de .doubleslash .keeptime .model .Model ;
79import de .doubleslash .keeptime .model .Project ;
810import de .doubleslash .keeptime .model .Work ;
911import de .doubleslash .keeptime .model .repos .ProjectRepository ;
1012import de .doubleslash .keeptime .model .repos .WorkRepository ;
13+ import org .springframework .dao .DataAccessException ;
1114import org .springframework .http .HttpStatus ;
1215import org .springframework .http .ResponseEntity ;
1316import 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}
0 commit comments