package etunicorn.controller; import etunicorn.RestrictedTo; import etunicorn.entity.Personne; import etunicorn.entity.Role; import etunicorn.exception.EntityRequestMismatchException; import etunicorn.exception.NotEnoughDataException; import etunicorn.exception.ObjectNotFoundException; import etunicorn.generated.model.UpdatePersonneByIdRequest; import etunicorn.generated.model.UpdatePersonneRequest; import etunicorn.repository.PersonneRepository; import etunicorn.repository.RoleRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * etunicorn-server * Copyright © 2017 Le Club Info Polytech Lille * Tous droits réservés */ @RestController public class PersonneController extends BaseController implements etunicorn.generated.PersonneController { @Autowired private PersonneRepository personneRepository; @Autowired private RoleRepository roleRepository; @Override @RestrictedTo("PERSONNE_LIST") public ResponseEntity getPersonne() { return new ResponseEntity((List) this.personneRepository.findAll(), HttpStatus.OK); } private ResponseEntity mergePersonne(Personne personne, String carte, Date naissance, String login, String role) { if (carte != null) { personne.setCarte(carte); } if (naissance != null) { personne.setNaissance(naissance); } if (login != null) { personne.setLogin(login); } // TODO Il faut que login ou carte soient mis if (role != null) { if (hasPermission("PERSONNE_ROLE")) { Role roleObj = roleRepository.findByNom(role); personne.setRole(roleObj); if (roleObj == null) { return new ResponseEntity("Rôle inconnu", HttpStatus.NOT_FOUND); } } else { return new ResponseEntity(HttpStatus.FORBIDDEN); } } try { this.personneRepository.save(personne); } catch (DataIntegrityViolationException e) { return new ResponseEntity(HttpStatus.CONFLICT); } return new ResponseEntity(personne, HttpStatus.CREATED); } @Override @RestrictedTo("PERSONNE_ADD") public ResponseEntity updatePersonne(@Valid @RequestBody UpdatePersonneRequest updatePersonneRequest) { Personne personne = new Personne(); try { mergeRequestInEntity(updatePersonneRequest, personne); } catch (EntityRequestMismatchException e) { return generateError(e); } catch (NotEnoughDataException e) { return generateError(HttpStatus.BAD_REQUEST, e, "Il n'y a pas suffisament de données pour identifier un sous-objet"); } catch (ObjectNotFoundException e) { return generateError(HttpStatus.NOT_FOUND, e, "Sous-objet non trouvé"); } return new ResponseEntity(personne, HttpStatus.CREATED); } public ResponseEntity updatePersonne(@RequestParam(required = false) String carte, @RequestParam(required = false) Date naissance, @RequestParam(required = false) String login, @RequestParam(required = false) String role) { Personne personne = new Personne(); return mergePersonne(personne, carte, naissance, login, role); } @Override @RestrictedTo("PERSONNE_GET") public ResponseEntity getPersonneById(@PathVariable BigDecimal idPersonne) { Personne personne = personneRepository.findById(idPersonne.intValueExact()); if (personne == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); } return new ResponseEntity(personne, HttpStatus.OK); } @Override @RestrictedTo("PERSONNE_EDIT") public ResponseEntity updatePersonneById(@PathVariable BigDecimal idPersonne, @Valid @RequestBody UpdatePersonneByIdRequest updatePersonneByIdRequest) { return null; } public ResponseEntity updatePersonneById(@PathVariable BigDecimal idPersonne, @RequestParam(required = false) String carte, @RequestParam(required = false) Date naissance, @RequestParam(required = false) String login, @RequestParam(required = false) String role) { Personne personne = personneRepository.findById(idPersonne.intValueExact()); if (personne == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); } return mergePersonne(personne, carte, naissance, login, role); } @Override @RestrictedTo("PERSONNE_REMOVE") public ResponseEntity deletePersonneById(@PathVariable BigDecimal idPersonne) { Personne personne = personneRepository.findById(idPersonne.intValueExact()); if (personne == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); } personneRepository.delete(personne); return new ResponseEntity(personne, HttpStatus.NO_CONTENT); } }