PersonneController.java 3.97 KB
package etunicorn;

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.RequestParam;
import org.springframework.web.bind.annotation.RestController;

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>((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<Object>("Rôle inconnu", HttpStatus.NOT_FOUND);
                }
            } else {
                return new ResponseEntity<Object>(HttpStatus.FORBIDDEN);
            }
        }
        try {
            this.personneRepository.save(personne);
        } catch (DataIntegrityViolationException e) {
            return new ResponseEntity<Object>(HttpStatus.CONFLICT);
        }
        return new ResponseEntity<Object>(personne, HttpStatus.CREATED);
    }

    @Override
    @RestrictedTo("PERSONNE_ADD")
    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<Object>(HttpStatus.NOT_FOUND);
        }
        return new ResponseEntity<Object>(personne, HttpStatus.OK);
    }

    @Override
    @RestrictedTo("PERSONNE_EDIT")
    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<Object>(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<Object>(HttpStatus.NOT_FOUND);
        }
        personneRepository.delete(personne);
        return new ResponseEntity<Object>(personne, HttpStatus.NO_CONTENT);
    }

}