package etunicorn.controller; import etunicorn.RestrictedTo; import etunicorn.entity.Personne; import etunicorn.entity.Role; import etunicorn.generated.model.UpdatePersonneByIdRequest; import etunicorn.generated.model.UpdatePersonneRequest; import etunicorn.generated.model.UpdateVirerRequest; 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.RestController; import javax.validation.Valid; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.LinkedHashMap; 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, UpdatePersonneRequest updatePersonneRequest) { if (updatePersonneRequest.getNaissance() != null) { SimpleDateFormat format = new SimpleDateFormat("Y-M-d"); try { personne.setNaissance(format.parse(updatePersonneRequest.getNaissance())); } catch (ParseException e) { return generateError(HttpStatus.BAD_REQUEST, e, "La date n'est pas au format " + format.toString()); } } if (updatePersonneRequest.getCarte() != null) { personne.setCarte(updatePersonneRequest.getCarte()); } if (updatePersonneRequest.getLogin() != null) { personne.setLogin(updatePersonneRequest.getLogin()); } if (updatePersonneRequest.getRole() != null) { if (updatePersonneRequest.getRole() instanceof LinkedHashMap) { LinkedHashMap roleMap = (LinkedHashMap) updatePersonneRequest.getRole(); Role role = roleRepository.findByNom(roleMap.get("nom")); if (role == null) { return generateError(HttpStatus.NOT_FOUND, "Rôle inconnu"); } if (personne.getRole() != role) { if (hasPermission("PERSONNE_ROLE")) { personne.setRole(role); } else { return generateError(HttpStatus.FORBIDDEN, "Vous ne pouvez pas changer le rôle"); } } } else { return generateError(HttpStatus.BAD_REQUEST, "Le rôle est un objet"); } } if (personne.getCarte() == null && personne.getLogin() == null) { return generateError(HttpStatus.BAD_REQUEST, "Le login ou la carte doivent être au moins renseignés."); } if (personne.getRole() == null) { personne.setRole(roleRepository.findByNom("etudiant")); } try { this.personneRepository.save(personne); } catch (DataIntegrityViolationException e) { return generateError(HttpStatus.CONFLICT, "Un utilisateur avec la même carte ou le même login existe déjà"); } return new ResponseEntity(personne, HttpStatus.CREATED); } @Override @RestrictedTo("PERSONNE_ADD") public ResponseEntity updatePersonne(@Valid @RequestBody UpdatePersonneRequest updatePersonneRequest) { Personne personne = new Personne(); return mergePersonne(personne, updatePersonneRequest); } @Override @RestrictedTo("PERSONNE_GET") public ResponseEntity getPersonneById(@PathVariable Long idPersonne) { Personne personne = personneRepository.findById(idPersonne.intValue()); if (personne == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); } return new ResponseEntity(personne, HttpStatus.OK); } @Override @RestrictedTo("PERSONNE_EDIT") public ResponseEntity updatePersonneById(@PathVariable Long idPersonne, @Valid @RequestBody UpdatePersonneByIdRequest updatePersonneByIdRequest) { Personne personne = personneRepository.findById(idPersonne.intValue()); if (personne == null) { return generateError(HttpStatus.NOT_FOUND, "Personne introuvable"); } UpdatePersonneRequest updatePersonneRequest = new UpdatePersonneRequest(); updatePersonneRequest.setCarte(updatePersonneByIdRequest.getCarte()); updatePersonneRequest.setNaissance(updatePersonneByIdRequest.getNaissance()); updatePersonneRequest.setLogin(updatePersonneByIdRequest.getLogin()); updatePersonneRequest.setRole(updatePersonneByIdRequest.getRole()); return mergePersonne(personne, updatePersonneRequest); } @Override @RestrictedTo("PERSONNE_REMOVE") public ResponseEntity deletePersonneById(@PathVariable Long idPersonne) { Personne personne = personneRepository.findById(idPersonne.intValue()); if (personne == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); } personneRepository.delete(personne); return new ResponseEntity(personne, HttpStatus.NO_CONTENT); } @Override public ResponseEntity updateVirer(@PathVariable Long idPersonne, @Valid @RequestBody UpdateVirerRequest updateVirerRequest) { return null; } }