package com.plannaplan.controllers; import java.util.HashMap; import java.util.List; import com.plannaplan.App; import com.plannaplan.entities.Groups; import com.plannaplan.responses.mappers.GroupsMappers; import com.plannaplan.responses.models.GroupDefaultResponse; import com.plannaplan.responses.models.CourseWithGroupsResponse; import com.plannaplan.services.GroupService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @RestController @CrossOrigin @RequestMapping("/api/" + App.API_VERSION + "/groups") @Api(tags = { "Group" }, value = "Group", description = "Enpoints to deal with gorups. Group is related directly to course and can be either class and lecture") public class GroupController { @Autowired private GroupService groupService; @GetMapping("/course/{id}") @ApiOperation(value = "Return list of lectures and classes (if present) given course") public ResponseEntity> getCourses( @PathVariable(name = "id") Long id, @RequestParam(name = "capacity", defaultValue = "true") @ApiParam(value = "Boolean if we want to have capacity field in response") Boolean capacity, @RequestParam(name = "takenPlaces", defaultValue = "false") @ApiParam(value = "Boolean if we want to have respoonse with information about taken places by other students") Boolean takenPlaces) { List groups = this.groupService.getGroupsByCourse(id); if (takenPlaces) { HashMap ammounts = this.groupService.getTakenPlaces(groups); if (capacity) { return new ResponseEntity<>(GroupsMappers.mapToGetCourseGroupsWithCapacityResponse(groups, ammounts), HttpStatus.OK); } return new ResponseEntity<>(GroupsMappers.mapToGetCourseGroupsDefaultResponse(groups, ammounts), HttpStatus.OK); } if (capacity) { return new ResponseEntity<>(GroupsMappers.mapToGetCourseGroupsWithCapacityResponse(groups), HttpStatus.OK); } return new ResponseEntity<>(GroupsMappers.mapToGetCourseGroupsDefaultResponse(groups), HttpStatus.OK); } @PreAuthorize("hasRole('ROLE_DEANERY')") @PutMapping("/{id}/capacity") @ApiOperation(value = "Change capacity of given group. You need to provide DEANERY token to be ale to change capacity") public ResponseEntity updateCapacity( @PathVariable(name = "id") @ApiParam(value = "id of group to change capacity") Long id, @RequestParam(name = "newcapacity") @ApiParam(value = "capacity to be set") int newcapacity) { final Groups group = this.groupService.getGroupById(id).get(); if (group == null) { return new ResponseEntity<>("Given group doens't exist", HttpStatus.NOT_FOUND); } group.setCapacity(newcapacity); this.groupService.save(group); return new ResponseEntity<>("Success", HttpStatus.OK); } }