2020-08-08 14:14:42 +02:00
package com.plannaplan.controllers ;
2020-12-07 23:32:11 +01:00
import java.util.ArrayList ;
import java.util.HashMap ;
2020-08-08 14:14:42 +02:00
import java.util.List ;
2020-09-15 11:31:30 +02:00
import com.plannaplan.App ;
2020-08-08 14:14:42 +02:00
import com.plannaplan.entities.Course ;
2020-10-09 14:53:54 +02:00
import com.plannaplan.responses.mappers.CoursesResponseMappers ;
2020-11-08 17:20:00 +01:00
import com.plannaplan.responses.models.CoursesDefaultResponse ;
import com.plannaplan.responses.models.CoursesWithGroupsResponse ;
2020-12-07 23:32:11 +01:00
import com.plannaplan.responses.models.GroupDefaultResponse ;
2020-08-08 14:14:42 +02:00
import com.plannaplan.services.CourseService ;
2020-12-07 23:32:11 +01:00
import com.plannaplan.services.GroupService ;
import com.plannaplan.types.GroupType ;
2020-08-08 14:14:42 +02:00
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.http.HttpStatus ;
import org.springframework.http.ResponseEntity ;
import org.springframework.web.bind.annotation.CrossOrigin ;
import org.springframework.web.bind.annotation.RestController ;
2020-11-04 16:40:02 +01:00
import io.swagger.annotations.Api ;
2020-11-04 16:58:26 +01:00
import io.swagger.annotations.ApiOperation ;
2020-11-04 17:23:29 +01:00
import io.swagger.annotations.ApiParam ;
2020-11-04 16:40:02 +01:00
2020-08-08 14:14:42 +02:00
import org.springframework.web.bind.annotation.GetMapping ;
2020-09-15 11:31:30 +02:00
import org.springframework.web.bind.annotation.RequestMapping ;
2020-10-30 16:42:57 +01:00
import org.springframework.web.bind.annotation.RequestParam ;
import com.plannaplan.responses.models.abstracts.CoursesResponse ;
2020-08-08 14:14:42 +02:00
@RestController
@CrossOrigin
2020-09-15 11:31:30 +02:00
@RequestMapping ( " /api/ " + App . API_VERSION + " /courses " )
2020-11-04 16:40:02 +01:00
@Api ( tags = {
" Course " } , value = " Course " , description = " Endpoints to deal with courses. All courses can have classes, lectures or both. " )
2020-08-08 14:14:42 +02:00
public class CoursesController {
@Autowired
private CourseService courseService ;
2020-12-07 23:32:11 +01:00
@Autowired
private GroupService groupService ;
2020-10-30 16:42:57 +01:00
@GetMapping ( " /all " )
2020-11-04 16:58:26 +01:00
@ApiOperation ( value = " Return all courses " )
2020-11-04 16:40:02 +01:00
public ResponseEntity < List < ? extends CoursesResponse > > getMethodName (
2020-12-07 23:32:11 +01:00
@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 ) {
2020-08-24 11:36:15 +02:00
List < Course > courses = this . courseService . getAllCourses ( ) ;
2020-10-30 16:42:57 +01:00
if ( groups ) {
2020-12-07 23:32:11 +01:00
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 ) ;
}
2020-11-08 17:20:00 +01:00
final List < CoursesWithGroupsResponse > response = CoursesResponseMappers
2020-11-04 16:40:02 +01:00
. mapToGetCoursesWithGroupsResponse ( courses ) ;
2020-10-30 16:42:57 +01:00
return new ResponseEntity < > ( response , HttpStatus . OK ) ;
}
2020-11-08 17:20:00 +01:00
final List < CoursesDefaultResponse > response = CoursesResponseMappers . mapToGetCoursesResponse ( courses ) ;
2020-10-13 17:07:04 +02:00
return new ResponseEntity < > ( response , HttpStatus . OK ) ;
2020-08-24 12:02:44 +02:00
}
2020-08-08 14:14:42 +02:00
}