150 lines
7.0 KiB
Java
150 lines
7.0 KiB
Java
package ovh.herisson.Clyde.EndPoints;
|
|
|
|
/******************************************************
|
|
* @file LessonRequestsController.java
|
|
* @author William Karpinski
|
|
* @scope Extension Horaire
|
|
*
|
|
* Controller of lesson requests API
|
|
******************************************************/
|
|
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
|
|
import ovh.herisson.Clyde.Services.*;
|
|
import ovh.herisson.Clyde.Tables.*;
|
|
|
|
import java.util.Map;
|
|
|
|
@RestController
|
|
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
|
|
public class LessonRequestsController {
|
|
private final LessonRequestService lessonRequestServ;
|
|
private final AuthenticatorService authServ;
|
|
private final UserService userServ;
|
|
|
|
private final LessonService lessonServ;
|
|
public LessonRequestsController(LessonRequestService lessonRequestServer, AuthenticatorService authServ, UserService userServ, LessonService lessonServ) {
|
|
this.lessonRequestServ = lessonRequestServer;
|
|
this.authServ = authServ;
|
|
this.userServ = userServ;
|
|
this.lessonServ = lessonServ;
|
|
}
|
|
/**
|
|
* Return a lesson request via its id
|
|
*/
|
|
@GetMapping("/requests/lessonRequest/{id}")
|
|
public ResponseEntity<Map<String,Object>> getById(@RequestHeader("Authorization") String token, @PathVariable long id){
|
|
if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
|
|
return new UnauthorizedResponse<>(null);
|
|
|
|
LessonChangesRequest lessonRequest= lessonRequestServ.findById(id);
|
|
|
|
return new ResponseEntity<>(ProtectionService.lessonRequestWithoutPassword(lessonRequest), HttpStatus.OK);
|
|
}
|
|
/**
|
|
* return all the requests made by a user
|
|
*/
|
|
@GetMapping("/requests/lessonRequests/owned")
|
|
public ResponseEntity<Iterable<Map<String, Object>>> getOwnedRequests(@RequestHeader("Authorization") String token){
|
|
if(authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token))
|
|
return new UnauthorizedResponse<>(null);
|
|
User user = authServ.getUserFromToken(token);
|
|
Iterable<LessonChangesRequest> lessonChangesRequests = lessonRequestServ.findOwnRequests(user);
|
|
return new ResponseEntity<>(ProtectionService.lessonRequestsWithoutPassword(lessonChangesRequests),HttpStatus.OK);
|
|
|
|
}
|
|
/**
|
|
* Return all the lesson requests
|
|
*/
|
|
@GetMapping("/requests/lessonRequests")
|
|
public ResponseEntity<Iterable<Map<String,Object>>> getAllRequests(@RequestHeader("Authorization") String token){
|
|
if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary},token))
|
|
return new UnauthorizedResponse<>(null);
|
|
|
|
Iterable<LessonChangesRequest> lessonRequests= lessonRequestServ.getAll();
|
|
|
|
return new ResponseEntity<>(ProtectionService.lessonRequestsWithoutPassword(lessonRequests), HttpStatus.OK);
|
|
}
|
|
/**
|
|
* Post a lesson request
|
|
*/
|
|
@PostMapping("/requests/lessonRequest")
|
|
public ResponseEntity<Map<String, Object>> makeRequest(@RequestHeader("Authorization") String token, @RequestBody Map<String,Object> lessonRequestInfos){
|
|
if(authServ.isNotIn(new Role[]{Role.Admin,Role.Teacher},token))
|
|
return new UnauthorizedResponse<>(null);
|
|
LessonChangesRequest lessonChangesRequest = lessonRequestServ.createLessonRequest(lessonRequestInfos);
|
|
LessonChangesRequest createdRequest = lessonRequestServ.save(lessonChangesRequest);
|
|
if(createdRequest == null)
|
|
return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
|
|
return new ResponseEntity<>(ProtectionService.lessonRequestWithoutPassword(lessonChangesRequest),HttpStatus.OK);
|
|
}
|
|
/**
|
|
* Modify a lesson Request
|
|
*/
|
|
@PatchMapping("/requests/lessonRequest/{id}")
|
|
public ResponseEntity<LessonChangesRequest> changeRequestState(@PathVariable long id,
|
|
@RequestHeader("Authorization") String token,
|
|
@RequestBody Map<String , Object> infos){
|
|
if(authServ.isNotIn(new Role[]{Role.Secretary,Role.Admin},token))
|
|
return new UnauthorizedResponse<>(null);
|
|
|
|
LessonChangesRequest lessonRequest = lessonRequestServ.findById(id);
|
|
String local = "";
|
|
RequestState state = null;
|
|
for (Map.Entry<String, Object> entry : infos.entrySet()) {
|
|
switch (entry.getKey()) {
|
|
case "local":
|
|
local = (String) entry.getValue();
|
|
break;
|
|
case "state":
|
|
state = RequestState.valueOf((String)entry.getValue());
|
|
}
|
|
}
|
|
|
|
if (state == null)
|
|
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
|
|
|
|
if(lessonRequest.getRequestType() == 0 ) {
|
|
if (!lessonRequestServ.modifyCreateRequestState(lessonRequest, state, local))
|
|
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
|
|
userServ.Notify(lessonRequest.getUser(), new Notification("Request took in charge","Request"+ state + ":" + lessonRequest.getCourse().getTitle(), "#/manage-owned-lessons"));
|
|
}
|
|
|
|
else if(lessonRequest.getRequestType() == 1){
|
|
infos.put("lessonStart", lessonRequest.getLessonStart());
|
|
infos.put("lessonEnd", lessonRequest.getLessonEnd());
|
|
infos.put("lessonType",lessonRequest.getLessonType());
|
|
if(!lessonRequestServ.modifyChangeRequestState(infos,lessonRequest.getLessonId(),state))
|
|
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
|
|
lessonRequest.setState(state);
|
|
userServ.Notify(lessonRequest.getUser(), new Notification("Request took in charge","Request"+ state + ":" + lessonServ.findById(lessonRequest.getLessonId()).getCourse().getTitle(), "#/manage-owned-lessons"));
|
|
|
|
}
|
|
|
|
else{
|
|
userServ.Notify(lessonRequest.getUser(), new Notification("Request took in charge","Request"+ state + ":" + lessonServ.findById(lessonRequest.getLessonId()).getCourse().getTitle(), "#/manage-owned-lessons"));
|
|
lessonRequestServ.modifyDeleteRequest(lessonRequest, state);
|
|
lessonRequest.setState(state);
|
|
}
|
|
lessonRequestServ.save(lessonRequest);
|
|
return new ResponseEntity<>(HttpStatus.OK);
|
|
|
|
}
|
|
|
|
/**
|
|
* Delete a lesson request
|
|
*/
|
|
@DeleteMapping("/requests/lessonRequest/{id}")
|
|
public ResponseEntity<String> deleteRequest(@RequestHeader("Authorization") String token, @PathVariable long id){
|
|
if(authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary,Role.Teacher},token))
|
|
return new UnauthorizedResponse<>(null);
|
|
LessonChangesRequest lessonChangesRequest = lessonRequestServ.findById(id);
|
|
if (lessonChangesRequest == null)
|
|
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
|
|
lessonRequestServ.delete(lessonChangesRequest);
|
|
return new ResponseEntity<>(HttpStatus.OK);
|
|
}
|
|
}
|