2021-01-06 13:40:04 +01:00
package com.plannaplan.controllers ;
import java.util.Map ;
2021-01-06 14:34:25 +01:00
import java.util.Optional ;
2021-01-06 13:40:04 +01:00
import com.plannaplan.App ;
2021-01-06 14:34:25 +01:00
import com.plannaplan.entities.Assignment ;
2021-01-06 14:50:34 +01:00
import com.plannaplan.entities.Exchange ;
2021-01-06 14:34:25 +01:00
import com.plannaplan.entities.Groups ;
import com.plannaplan.entities.User ;
2021-01-06 16:23:18 +01:00
import com.plannaplan.exceptions.UserNotFoundException ;
2021-01-06 14:50:34 +01:00
import com.plannaplan.services.AssignmentService ;
import com.plannaplan.services.ExchangeService ;
import com.plannaplan.services.GroupService ;
2021-01-06 14:34:25 +01:00
2021-01-06 14:50:34 +01:00
import org.springframework.beans.factory.annotation.Autowired ;
2021-01-06 14:34:25 +01:00
import org.springframework.http.HttpStatus ;
2021-01-06 13:40:04 +01:00
import org.springframework.http.ResponseEntity ;
import org.springframework.web.bind.annotation.CrossOrigin ;
import org.springframework.web.bind.annotation.PostMapping ;
import org.springframework.web.bind.annotation.RequestBody ;
import org.springframework.web.bind.annotation.RequestMapping ;
import org.springframework.web.bind.annotation.RestController ;
import io.swagger.annotations.Api ;
import io.swagger.annotations.ApiOperation ;
@RestController
@CrossOrigin
@RequestMapping ( " /api/ " + App . API_VERSION + " /exchanges " )
@Api ( tags = { " Exchange " } , value = " Exchange " , description = " Endpoint to exchange with accepted assignments. " )
2021-01-06 16:23:18 +01:00
public class ExchangeController extends TokenBasedController {
2021-01-06 14:50:34 +01:00
2021-01-06 16:23:18 +01:00
/ *
* Endpoint do wylistowania exchangow użytkownika
* Endpoint do usuwania exchanga
* /
2021-01-06 14:50:34 +01:00
@Autowired
private GroupService groupService ;
@Autowired
private AssignmentService assignmentService ;
2021-01-06 14:34:25 +01:00
2021-01-06 14:50:34 +01:00
@Autowired
private ExchangeService exchangeService ;
2021-01-06 13:40:04 +01:00
@PostMapping ( " /exchange " )
@ApiOperation ( value = " Return all courses " )
2021-01-06 16:23:18 +01:00
public ResponseEntity < String > createExchange ( @RequestBody Map < String , Long > exchangeRequest )
throws UserNotFoundException {
2021-01-06 14:34:25 +01:00
2021-01-06 16:23:18 +01:00
final User asker = this . getCurrentUser ( )
. orElseThrow ( ( ) - > new UserNotFoundException ( " Invalid token " ) ) ;
2021-01-06 14:50:34 +01:00
final Long assignmentId = exchangeRequest . get ( " assignment " ) ;
final Long groupId = exchangeRequest . get ( " group " ) ;
2021-01-06 16:23:18 +01:00
if ( assignmentId = = null | | groupId = = null ) {
2021-01-06 14:50:34 +01:00
return new ResponseEntity < > ( " Some of values are missing " , HttpStatus . BAD_REQUEST ) ;
2021-01-06 14:34:25 +01:00
}
2021-01-06 14:50:34 +01:00
final Optional < Assignment > assignment = this . assignmentService . getById ( assignmentId ) ;
final Optional < Groups > group = this . groupService . getGroupById ( groupId ) ;
2021-01-06 16:23:18 +01:00
if ( assignment . isEmpty ( ) | | group . isEmpty ( ) ) {
2021-01-06 14:50:34 +01:00
return new ResponseEntity < > ( " Some of provided value does not exist. " , HttpStatus . BAD_REQUEST ) ;
}
2021-01-06 16:23:18 +01:00
final Assignment assignmentInstance = assignment . get ( ) ;
2021-01-06 16:50:08 +01:00
final Groups groupInstance = group . get ( ) ;
2021-01-06 16:23:18 +01:00
2021-01-06 17:12:20 +01:00
if ( ! ( assignmentInstance . getCommision ( ) . getCommisionOwner ( ) . getId ( ) . equals ( asker . getId ( ) ) & & assignmentInstance . isAccepted ( ) ) ) {
2021-01-06 16:50:08 +01:00
return new ResponseEntity < > ( " Some of problems appeared. Check if you have access to given assignment and if it is accepted or the exchange has not been already added. " , HttpStatus . BAD_REQUEST ) ;
2021-01-06 16:23:18 +01:00
}
2021-01-06 14:50:34 +01:00
2021-01-06 16:50:08 +01:00
this . exchangeService . save ( new Exchange ( assignmentInstance , groupInstance ) ) ;
2021-01-06 14:34:25 +01:00
2021-01-06 16:23:18 +01:00
return new ResponseEntity < > ( " Success " , HttpStatus . OK ) ;
2021-01-06 13:40:04 +01:00
}
2021-01-06 16:50:08 +01:00
2021-01-06 13:40:04 +01:00
}