PersonneController.java
5.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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.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.math.BigDecimal;
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>((List) this.personneRepository.findAll(), HttpStatus.OK);
}
private ResponseEntity<?> mergePersonne(Personne personne, UpdatePersonneRequest updatePersonneRequest) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
if (updatePersonneRequest.getNaissance() != null) {
try {
personne.setNaissance(format.parse(updatePersonneRequest.getNaissance()));
} catch (ParseException e) {
e.printStackTrace();
}
}
if (updatePersonneRequest.getCarte() != null) {
personne.setCarte(updatePersonneRequest.getCarte());
}
if (updatePersonneRequest.getLogin() != null) {
personne.setLogin(updatePersonneRequest.getLogin());
}
if (personne.getCarte() == null && personne.getLogin() == null) {
return generateError(HttpStatus.BAD_REQUEST, "La date ou la carte doivent être au moins renseignés.");
}
if (updatePersonneRequest.getRole() != null) {
if (updatePersonneRequest.getRole() instanceof LinkedHashMap) {
LinkedHashMap<String, String> roleMap = (LinkedHashMap<String, String>) 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");
}
}
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<Object>(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 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, @Valid @RequestBody UpdatePersonneByIdRequest updatePersonneByIdRequest) {
Personne personne = personneRepository.findById(idPersonne.intValueExact());
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 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);
}
}