PersonneController.java
5.9 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
133
134
135
136
137
138
139
140
141
142
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>((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<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");
}
}
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<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 Long idPersonne) {
Personne personne = personneRepository.findById(idPersonne.intValue());
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 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<Object>(HttpStatus.NOT_FOUND);
}
personneRepository.delete(personne);
return new ResponseEntity<Object>(personne, HttpStatus.NO_CONTENT);
}
@Override
public ResponseEntity<?> updateVirer(@PathVariable Long idPersonne, @Valid @RequestBody UpdateVirerRequest updateVirerRequest) {
return null;
}
}