2020-10-19 11:12:24 +02:00
package com.plannaplan.controllers ;
2020-10-19 12:13:02 +02:00
import java.util.List ;
2020-12-27 13:54:33 +01:00
import java.util.Optional ;
2020-10-19 12:13:02 +02:00
2020-10-19 11:12:24 +02:00
import com.plannaplan.App ;
2020-10-19 12:13:02 +02:00
import com.plannaplan.entities.User ;
import com.plannaplan.responses.mappers.UserResponseMappers ;
2020-11-08 17:20:00 +01:00
import com.plannaplan.responses.models.UserResponse ;
2020-10-19 11:12:24 +02:00
import com.plannaplan.services.UserService ;
2020-12-27 13:54:33 +01:00
import com.plannaplan.types.UserRoles ;
2020-10-19 11:12:24 +02:00
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.security.config.annotation.method.configuration.EnableGlobalMethodSecurity ;
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-10-19 11:12:24 +02:00
import org.springframework.web.bind.annotation.GetMapping ;
2020-12-27 13:54:33 +01:00
import org.springframework.web.bind.annotation.PostMapping ;
2020-10-19 11:12:24 +02:00
import org.springframework.web.bind.annotation.RequestMapping ;
import org.springframework.web.bind.annotation.RequestParam ;
@RestController
@CrossOrigin
2020-10-19 12:13:02 +02:00
@RequestMapping ( " /api/ " + App . API_VERSION + " /users " )
2020-10-19 11:12:24 +02:00
@EnableGlobalMethodSecurity ( prePostEnabled = true )
2020-11-04 16:40:02 +01:00
@Api ( tags = { " Users " } , value = " Users " , description = " Endpoints to deal with users. " )
2020-10-19 12:13:02 +02:00
public class UsersController {
2020-10-19 11:12:24 +02:00
@Autowired
private UserService userService ;
2020-11-05 14:32:42 +01:00
@GetMapping ( " /student/search " )
2020-10-19 11:12:24 +02:00
@PreAuthorize ( " hasRole('ROLE_DEANERY') " )
2020-11-04 16:58:26 +01:00
@ApiOperation ( value = " Serch for user by providing query. If query is empty it will return all students. You need token with DEANERY role to call this " )
2020-12-07 22:21:34 +01:00
public ResponseEntity < List < UserResponse > > searchForStudent (
2020-11-04 17:23:29 +01:00
@RequestParam ( " query " ) @ApiParam ( value = " Query to filter all students. If empty will match everyone " ) String query ) {
2020-10-19 12:13:02 +02:00
final List < User > searches = this . userService . searchForStudents ( query ) ;
2020-11-08 17:20:00 +01:00
final List < UserResponse > response = UserResponseMappers . mapToDefaultResponse ( searches ) ;
2020-10-19 12:13:02 +02:00
return new ResponseEntity < > ( response , HttpStatus . OK ) ;
2020-10-19 11:12:24 +02:00
}
2020-12-07 22:21:34 +01:00
@GetMapping ( " /students " )
@PreAuthorize ( " hasRole('ROLE_DEANERY') " )
@ApiOperation ( value = " Gets all students. You need token with DEANERY role to call this " )
public ResponseEntity < List < UserResponse > > getAllStudents ( ) {
2020-12-18 15:24:01 +01:00
final List < User > searches = this . userService . getAllStudents ( ) ;
2020-12-07 22:21:34 +01:00
final List < UserResponse > response = UserResponseMappers . mapToDefaultResponse ( searches ) ;
return new ResponseEntity < > ( response , HttpStatus . OK ) ;
}
2020-12-27 13:54:33 +01:00
@PostMapping ( path = " /admin " )
@PreAuthorize ( " hasRole('ROLE_ADMIN') " )
@ApiOperation ( value = " Adds new admin user. " )
public ResponseEntity < String > addAdmin ( @RequestParam ( " authority " ) @ApiParam ( value = " USOS ID or E-mail. If user does not exist it should be USOS ID " ) String authority ) {
final Optional < User > userResponse = this . userService . getByAuthority ( authority ) ;
final User user = userResponse . orElseGet ( ( ) - > new User ( null , null , null , authority , UserRoles . ADMIN ) ) ;
user . setRole ( UserRoles . ADMIN ) ;
this . userService . save ( user ) ;
return new ResponseEntity < > ( " Success " , HttpStatus . OK ) ;
}
@PostMapping ( path = " /deanery " )
@PreAuthorize ( " hasRole('ROLE_ADMIN') " )
@ApiOperation ( value = " Adds new deanery user. " )
public ResponseEntity < String > addDeanery ( @RequestParam ( " authority " ) @ApiParam ( value = " USOS ID or E-mail. If user does not exist it should be USOS ID " ) String authority ) {
final Optional < User > userResponse = this . userService . getByAuthority ( authority ) ;
final User user = userResponse . orElseGet ( ( ) - > new User ( null , null , null , authority , UserRoles . DEANERY ) ) ;
user . setRole ( UserRoles . DEANERY ) ;
this . userService . save ( user ) ;
return new ResponseEntity < > ( " Success " , HttpStatus . OK ) ;
}
}