Added taken place in course response (needs refactor later)

This commit is contained in:
Filip Izydorczyk 2020-12-07 23:32:11 +01:00
parent 48394d3583
commit c34d53d056
3 changed files with 47 additions and 2 deletions

View File

@ -14,7 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
* Service of GroupService which can find(optional), get(By Course, Groups Ammount, Group By Id, find Not Existing Group), save, delete group. * Service of GroupService which can find(optional), get(By Course, Groups
* Ammount, Group By Id, find Not Existing Group), save, delete group.
*/ */
@Service @Service
@ -68,6 +69,10 @@ public class GroupService {
public HashMap<Long, Integer> getTakenPlaces(List<Groups> groups) { public HashMap<Long, Integer> getTakenPlaces(List<Groups> groups) {
HashMap<Long, Integer> response = new HashMap<>(); HashMap<Long, Integer> response = new HashMap<>();
if (groups.size() == 0) {
return response;
}
List<Object[]> respoonses = this.repo List<Object[]> respoonses = this.repo
.getAssignedAmounts(groups.stream().filter(Objects::nonNull).map(new Function<Groups, Long>() { .getAssignedAmounts(groups.stream().filter(Objects::nonNull).map(new Function<Groups, Long>() {
@Override @Override

View File

@ -1,5 +1,7 @@
package com.plannaplan.controllers; package com.plannaplan.controllers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import com.plannaplan.App; import com.plannaplan.App;
@ -7,7 +9,10 @@ import com.plannaplan.entities.Course;
import com.plannaplan.responses.mappers.CoursesResponseMappers; import com.plannaplan.responses.mappers.CoursesResponseMappers;
import com.plannaplan.responses.models.CoursesDefaultResponse; import com.plannaplan.responses.models.CoursesDefaultResponse;
import com.plannaplan.responses.models.CoursesWithGroupsResponse; import com.plannaplan.responses.models.CoursesWithGroupsResponse;
import com.plannaplan.responses.models.GroupDefaultResponse;
import com.plannaplan.services.CourseService; import com.plannaplan.services.CourseService;
import com.plannaplan.services.GroupService;
import com.plannaplan.types.GroupType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -33,12 +38,40 @@ public class CoursesController {
@Autowired @Autowired
private CourseService courseService; private CourseService courseService;
@Autowired
private GroupService groupService;
@GetMapping("/all") @GetMapping("/all")
@ApiOperation(value = "Return all courses") @ApiOperation(value = "Return all courses")
public ResponseEntity<List<? extends CoursesResponse>> getMethodName( public ResponseEntity<List<? extends CoursesResponse>> getMethodName(
@RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if you want to have resopnse with associated groups or without") Boolean groups) { @RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if you want to have resopnse with associated groups or without") Boolean groups,
@RequestParam(name = "takenPlaces", defaultValue = "false") @ApiParam(value = "Boolean if we want to have respoonse with information about taken places by other students. Needs to be set groups true first") Boolean takenPlaces) {
List<Course> courses = this.courseService.getAllCourses(); List<Course> courses = this.courseService.getAllCourses();
if (groups) { if (groups) {
if (takenPlaces) {
final List<CoursesWithGroupsResponse> response = new ArrayList<>();
courses.forEach(course -> {
final List<GroupDefaultResponse> lectures = new ArrayList<>();
final List<GroupDefaultResponse> classes = new ArrayList<>();
final HashMap<Long, Integer> ammounts = this.groupService.getTakenPlaces(course.getGroups());
course.getGroups().stream().forEach(group -> {
if (group.getType() == GroupType.CLASS) {
classes.add(new GroupDefaultResponse(group, ammounts.get(group.getId())));
} else {
lectures.add(new GroupDefaultResponse(group, ammounts.get(group.getId())));
}
});
response.add(new CoursesWithGroupsResponse(course, lectures, classes));
});
return new ResponseEntity<>(response, HttpStatus.OK);
}
final List<CoursesWithGroupsResponse> response = CoursesResponseMappers final List<CoursesWithGroupsResponse> response = CoursesResponseMappers
.mapToGetCoursesWithGroupsResponse(courses); .mapToGetCoursesWithGroupsResponse(courses);
return new ResponseEntity<>(response, HttpStatus.OK); return new ResponseEntity<>(response, HttpStatus.OK);

View File

@ -26,6 +26,13 @@ public class CoursesWithGroupsResponse extends CoursesResponse {
}); });
} }
public CoursesWithGroupsResponse(Course course, List<GroupDefaultResponse> lectures,
List<GroupDefaultResponse> classes) {
super(course);
this.lectures = lectures;
this.classes = classes;
}
public List<GroupDefaultResponse> getClasses() { public List<GroupDefaultResponse> getClasses() {
return this.classes; return this.classes;
} }