Commit 0fd5cbb2e3529a37c4c0f625b48de31323330f3f

Authored by Geoffrey PREUD'HOMME
1 parent 3c4951b9

Changements API & /consommation

api.raml
... ... @@ -51,53 +51,68 @@ version: v1
51 51 responses:
52 52 204:
53 53 description: Déconnecté avec succès
54   - 404:
55   - description: Jeton non trouvé
56 54 /personne:
57 55 get:
58   - description: Obtenir la liste des persones. Nécessite COMPTE_ADMIN
  56 + description: Obtenir la liste des persones. Nécessite PERSONNE_LIST.
59 57 responses:
60 58 200:
61 59 body:
62 60 application/json:
63   - example: |
64   - [
65   - {
66   - "id": 42,
67   - "carte": "AAAAA",
68   - "naissance": "855874800000",
69   - "solde": 1337,
70   - "login": "gbontoux",
71   - "role": "etudiant"
  61 + post:
  62 + description: Ajoute une nouvelle personne. Nécessite PERSONNE_ADD.
  63 + body:
  64 + application/json:
  65 + schema: |
  66 + {
  67 + "type": "object",
  68 + "$schema": "http://json-schema.org/draft-03/schema",
  69 + "id": "http://jsonschema.net",
  70 + "required": true,
  71 + "properties": {
  72 + "carte": {
  73 + "type": "string",
  74 + "required": false,
  75 + "minLength": 14,
  76 + "maxLength": 14
  77 + },
  78 + "naissance": {
  79 + "type": "string",
  80 + "required": false,
  81 + "format": "date"
  82 + },
  83 + "login": {
  84 + "type": "string",
  85 + "required": false
  86 + },
  87 + "role": {
  88 + "type": "role",
  89 + "required": false
  90 + }
72 91 }
73   - ]
  92 + }
  93 + responses:
  94 + 201:
  95 + description: Personne ajoutée avec succès
  96 + body:
  97 + application/json:
74 98 /{idPersonne}:
75 99 uriParameters:
76 100 idPersonne:
77   - type: number
  101 + type: integer
78 102 required: true
79 103 description: ID de la personne
80 104 minimum: 0
81 105 get:
82   - description: Obtenir les infos sur une personne. Nécessite COMPTE_ADMIN
  106 + description: Obtenir les infos sur une personne. Nécessite PERSONNE_GET
83 107 responses:
84 108 200:
85 109 description: Utilisateur récupéré
86 110 body:
87 111 application/json:
88   - example: |
89   - {
90   - "id": 42,
91   - "carte": "AAAAA",
92   - "naissance": "855874800000",
93   - "solde": 1337,
94   - "login": "gbontoux",
95   - "role": "etudiant"
96   - }
97 112 404:
98 113 description: Utilisateur non trouvé
99 114 put:
100   - description: Modifer les infos d'une personne. Nécessite COMPTE_ADMIN
  115 + description: Modifer les infos d'une personne. Nécessite PERSONNE_EDIT
101 116 body:
102 117 application/json:
103 118 schema: |
... ... @@ -134,56 +149,39 @@ version: v1
134 149 404:
135 150 description: Utilisateur non trouvé
136 151 delete:
137   - description: Obtenir les infos sur une personne. Nécessite COMPTE_ADMIN
  152 + description: Supprime une personne. Nécessite PERSONNE_REMOVE
138 153 responses:
139 154 204:
140 155 description: Utilisateur supprimé
141 156 404:
142 157 description: Utilisateur non trouvé
143   - post:
144   - description: Ajoute une nouvelle personne
145   - body:
146   - application/json:
147   - schema: |
148   - {
149   - "type": "object",
150   - "$schema": "http://json-schema.org/draft-03/schema",
151   - "id": "http://jsonschema.net",
152   - "required": true,
153   - "properties": {
154   - "carte": {
155   - "type": "string",
156   - "required": false,
157   - "minLength": 14,
158   - "maxLength": 14
159   - },
160   - "naissance": {
161   - "type": "string",
162   - "required": false,
163   - "format": "date"
164   - },
165   - "login": {
166   - "type": "string",
167   - "required": false
168   - },
169   - "role": {
170   - "type": "role",
171   - "required": false
172   - }
173   - }
174   - }
175   - responses:
176   - 201:
177   - description: Personne ajoutée avec succès
  158 + /virer:
  159 + post:
  160 + description: Permet de créditer ou débiter un compte
178 161 body:
179 162 application/json:
180   - example: |
  163 + schema: |
181 164 {
182   - "id": 42
  165 + "type": "object",
  166 + "$schema": "http://json-schema.org/draft-03/schema",
  167 + "id": "http://jsonschema.net",
  168 + "required": true,
  169 + "properties": {
  170 + "prix": {
  171 + "type": "number",
  172 + "required": true
  173 + }
  174 + }
183 175 }
  176 + responses:
  177 + 201:
  178 + description: La personne a bien été virée
  179 + 406:
  180 + description: La personne n'a pas assez de fonds pour être débitée
  181 +
184 182 /role:
185 183 get:
186   - description: Liste les rôles. Nécessite ROLE_ADMIN
  184 + description: Liste les rôles. Nécessite ROLE_LIST
187 185 responses:
188 186 200:
189 187 body:
... ... @@ -198,16 +196,16 @@ version: v1
198 196 "nom": "bde",
199 197 "permissions": [
200 198 {
201   - "nom": "CREER_EVNMT"
  199 + "nom": "EVNMT_ADD"
202 200 },
203 201 {
204   - "nom": "SUPPRIMER_EVNMT"
  202 + "nom": "EVNMT_REMOVE"
205 203 }
206 204 ]
207 205 }
208 206 ]
209 207 post:
210   - description: Ajoute un nouveau rôle. Nécessite ROLE_ADMIN
  208 + description: Ajoute un nouveau rôle. Nécessite ROLE_ADD
211 209 body:
212 210 application/json:
213 211 schema: |
... ... @@ -236,14 +234,14 @@ version: v1
236 234 required: true
237 235 description: Nom du role
238 236 delete:
239   - description: Supprime un rôle. Nécessite ROLE_ADMIN
  237 + description: Supprime un rôle. Nécessite ROLE_REMOVE
240 238 responses:
241 239 204:
242 240 description: Rôle supprimé
243 241 404:
244 242 description: Rôle inconnu
245 243 post:
246   - description: Ajoute une permission à un rôle. Nécessite ROLE_ADMIN
  244 + description: Ajoute une permission à un rôle. Nécessite ROLE_PERMISSION_ADD
247 245 body:
248 246 application/json:
249 247 schema: |
... ... @@ -255,7 +253,8 @@ version: v1
255 253 "properties": {
256 254 "nom": {
257 255 "type": "string",
258   - "required": true
  256 + "required": true,
  257 + "minLength": 3
259 258 }
260 259 }
261 260 }
... ... @@ -269,9 +268,9 @@ version: v1
269 268 nomPermission:
270 269 type: string
271 270 required: true
272   - description: nom de la permission
  271 + description: Nom de la permission
273 272 delete:
274   - description: Enlève la permission du rôle. Nécessite ROLE_ADMIN
  273 + description: Enlève la permission du rôle. Nécessite ROLE_PERMISSION_REMOVE
275 274 responses:
276 275 204:
277 276 description: Permission enlevée avec succès
... ... @@ -279,7 +278,7 @@ version: v1
279 278 description: Permission ou rôle inconnu
280 279 /permission:
281 280 get:
282   - description: Liste les permissions. Nécessite ROLE_ADMIN
  281 + description: Liste les permissions. Nécessite ROLE_LIST
283 282 responses:
284 283 200:
285 284 body:
... ... @@ -295,7 +294,7 @@ version: v1
295 294 ]
296 295 /evenement:
297 296 get:
298   - description: Obtenir la liste de tout les evenements. Nécessite EVNMT_ADMIN ou EVNMT_ACHETER ou EVNMT_REMBOURSER
  297 + description: Obtenir la liste de tout les evenements. Nécessite EVNMT_LIST
299 298 responses:
300 299 200:
301 300 body:
... ... @@ -304,19 +303,19 @@ version: v1
304 303 [
305 304 {
306 305 "id": 1,
307   - "nom": "patate",
  306 + "nom": "WEC",
308 307 "prix": 4,
309 308 "date": "2001-09-11"
310 309 },
311 310 {
312 311 "id": 2,
313   - "nom": "patate flambe",
  312 + "nom": "MidWork",
314 313 "prix": 5,
315 314 "date": "2001-09-11"
316 315 }
317 316 ]
318 317 post:
319   - description: Permet de creer un nouvel evenement. Nécessite EVNMT_ADMIN
  318 + description: Permet de creer un nouvel evenement. Nécessite EVNMT_ADD
320 319 body:
321 320 application/json:
322 321 schema: |
... ... @@ -343,16 +342,16 @@ version: v1
343 342 }
344 343 responses:
345 344 201:
346   -
347   - /{evenementId}:
  345 + description: L'évènement a bien été créé
  346 + /{idEvenement}:
348 347 uriParameters:
349 348 evenementId:
350 349 type: integer
351 350 required: true
352   - description: id de l'evenement
  351 + description: ID de l'evenement
353 352 minimum: 0
354 353 put:
355   - description: Permet de modifier un évènement existant. Nécessite EVNMT_ADMIN
  354 + description: Permet de modifier un évènement existant. Nécessite EVNMT_EDIT
356 355 body:
357 356 application/json:
358 357 schema: |
... ... @@ -375,15 +374,15 @@ version: v1
375 374 "required": false,
376 375 "format": "date"
377 376 }
378   - }
  377 + }
379 378 }
380 379 responses:
381 380 202:
382   - description: Modification pris en compte
  381 + description: Évènement modifié
383 382 404:
384 383 description: L'evenement n'existe pas
385 384 get:
386   - description: Obtenir l'evenement {evenementId}. Nécessite EVNMT_ADMIN ou EVNMT_ACHETER ou EVNMT_REMBOURSER
  385 + description: Affiche l'évènement. Nécessite EVNMT_GET
387 386 responses:
388 387 200:
389 388 body:
... ... @@ -392,7 +391,7 @@ version: v1
392 391 [
393 392 {
394 393 "id": 1,
395   - "nom": "patate",
  394 + "nom": "WEC",
396 395 "prix": 4,
397 396 "date": "2001-09-11"
398 397 }
... ... @@ -400,13 +399,13 @@ version: v1
400 399 404:
401 400 description: Evenement non existant
402 401 delete:
403   - description: Permet de supprimer l'evenement {evenementId}. Nécessite EVNMT_ADMIN
  402 + description: Permet de supprimer l'evenement {evenementId}. Nécessite EVNMT_REMOVE
404 403 responses:
405 404 200:
406 405 description: L'evenement a été bien supprimé
407 406 /participe:
408 407 post:
409   - description: Permet de notifier que quelqu'un a participer à l'evenement (id de la personne a envoyer)
  408 + description: Enregistre la participation de quelqu'un à un évènement
410 409 body:
411 410 application/json:
412 411 schema: |
... ... @@ -424,12 +423,37 @@ version: v1
424 423 }
425 424 responses:
426 425 201:
427   - description: La personne est bien inscrite a cet evenement ou a bien était ajouté a la liste des participant
  426 + description: La participation a bien été enregistrée
428 427 402:
429   - description: La personne n'a pas payé pour participer à l'evenement
  428 + description: La personne n'a pas payé pour participer à l'évènement
  429 + /reserve:
  430 + post:
  431 + description: Payer pour un évènement
  432 + body:
  433 + application/json:
  434 + schema: |
  435 + {
  436 + "type": "object",
  437 + "$schema": "http://json-schema.org/draft-03/schema",
  438 + "id": "http://jsonschema.net",
  439 + "required": true,
  440 + "properties": {
  441 + "participant": {
  442 + "type": "Personne",
  443 + "required": true
  444 + },
  445 + "id": {
  446 + "type": "Evenement",
  447 + "required": true
  448 + }
  449 + }
  450 + }
  451 + responses:
  452 + 201:
  453 + description: L'evenement a bien été resérvé
430 454 /consommation:
431 455 get:
432   - description: Obtenir la liste de toutes les consommations. Nécessite CONSO_ADMIN ou CONSO_ACHETER ou CONSO_REMBOURSER
  456 + description: Obtenir la liste de toutes les consommations. Nécessite CONSO_LIST
433 457 responses:
434 458 200:
435 459 body:
... ... @@ -448,7 +472,7 @@ version: v1
448 472 }
449 473 ]
450 474 post:
451   - description: Permet de creer une nouvelle consommation. Nécessite CONSO_ADMIN
  475 + description: Permet de creer une nouvelle consommation. Nécessite CONSO_ADD
452 476 body:
453 477 application/json:
454 478 schema: |
... ... @@ -470,7 +494,7 @@ version: v1
470 494 }
471 495 responses:
472 496 201:
473   - /{consommationId}:
  497 + /{idConsommation}:
474 498 uriParameters:
475 499 consommationId:
476 500 type: integer
... ... @@ -525,6 +549,27 @@ version: v1
525 549 responses:
526 550 200:
527 551 description: La consommation a été bien supprime
  552 + /achete:
  553 + post:
  554 + description: Achat d'une consomation (id) par un participant à un acteur
  555 + body:
  556 + application/json:
  557 + schema: |
  558 + {
  559 + "type": "object",
  560 + "$schema": "http://json-schema.org/draft-03/schema",
  561 + "id": "http://jsonschema.net",
  562 + "required": true,
  563 + "properties": {
  564 + "participant": {
  565 + "type": "Personne",
  566 + "required": true
  567 + }
  568 + }
  569 + }
  570 + responses:
  571 + 201:
  572 + description: La consommation a été bien payée
528 573  
529 574 /transaction:
530 575 get:
... ... @@ -553,80 +598,13 @@ version: v1
553 598 "prix": -25.23
554 599 }
555 600 ]
556   - /consommation:
557   - post:
558   - description: Achat d'une consomation (id) par un participant à un acteur
559   - body:
560   - application/json:
561   - schema: |
562   - {
563   - "type": "object",
564   - "$schema": "http://json-schema.org/draft-03/schema",
565   - "id": "http://jsonschema.net",
566   - "required": true,
567   - "properties": {
568   - "participant": {
569   - "type": "Personne",
570   - "required": true
571   - },
572   - "id": {
573   - "type": "Consommation",
574   - "required": true
575   - }
576   - }
577   - }
578   - responses:
579   - 201:
580   - description: La consommation a été bien payé
581   - /evenement:
582   - post:
583   - body:
584   - application/json:
585   - schema: |
586   - {
587   - "type": "object",
588   - "$schema": "http://json-schema.org/draft-03/schema",
589   - "id": "http://jsonschema.net",
590   - "required": true,
591   - "properties": {
592   - "participant": {
593   - "type": "Personne",
594   - "required": true
595   - },
596   - "id": {
597   - "type": "Evenement",
598   - "required": true
599   - }
600   - }
601   - }
602   - responses:
603   - 201:
604   - description: L'evenement a bien été payé
605   - /credit:
606   - post:
607   - description: Permet de recharger ou debiter un compte
608   - body:
609   - application/json:
610   - schema: |
611   - {
612   - "type": "object",
613   - "$schema": "http://json-schema.org/draft-03/schema",
614   - "id": "http://jsonschema.net",
615   - "required": true,
616   - "properties": {
617   - "participant": {
618   - "type": "Personne",
619   - "required": true
620   - },
621   - "prix": {
622   - "type": "number",
623   - "required": true
624   - }
625   - }
626   - }
627   - responses:
628   - 201:
629   - description: La personne a bien été crédité
  601 + delete:
  602 + description: Annuler une transaction
  603 + responses:
  604 + 405:
  605 + description: Non implémenté
  606 +
  607 +
630 608 /{idPersonne}:
631 609 uriParameters:
632 610 idPersonne:
... ...
src/main/java/etunicorn/Application.java
... ... @@ -46,6 +46,11 @@ public class Application {
46 46 permissionRepository.save(new Permission("ROLE_PERMISSION_ADD"));
47 47 permissionRepository.save(new Permission("ROLE_PERMISSION_LIST"));
48 48 permissionRepository.save(new Permission("ROLE_PERMISSION_REMOVE"));
  49 + permissionRepository.save(new Permission("CONSO_ADD"));
  50 + permissionRepository.save(new Permission("CONSO_EDIT"));
  51 + permissionRepository.save(new Permission("CONSO_GET"));
  52 + permissionRepository.save(new Permission("CONSO_LIST"));
  53 + permissionRepository.save(new Permission("CONSO_REMOVE"));
49 54 // ...
50 55  
51 56 //roleRepository.save(new Role("admin", (List<Permission>) permissionRepository.findAll()));
... ...
src/main/java/etunicorn/controller/ConsommationController.java
1 1 package etunicorn.controller;
2 2  
  3 +import etunicorn.RestrictedTo;
3 4 import etunicorn.entity.Consommation;
  5 +import etunicorn.generated.model.UpdateAcheteRequest;
4 6 import etunicorn.generated.model.UpdateConsommationByIdRequest;
5 7 import etunicorn.generated.model.UpdateConsommationRequest;
6 8 import etunicorn.repository.ConsommationRepository;
... ... @@ -24,32 +26,66 @@ public class ConsommationController extends BaseController implements etunicorn.
24 26 ConsommationRepository consommationRepository;
25 27  
26 28 @Override
  29 + @RestrictedTo("CONSO_LIST")
27 30 public ResponseEntity<?> getConsommation() {
28 31 return new ResponseEntity<Object>(this.consommationRepository.findAll(), HttpStatus.OK);
29 32 }
30 33  
31 34 private ResponseEntity<?> mergeConsommation(Consommation consommation, UpdateConsommationRequest updateConsommationRequest) {
32   - // if (updateConsommationRequest.get)
33   - return null;
  35 + if (updateConsommationRequest.getNom() != null) {
  36 + consommation.setNom(updateConsommationRequest.getNom());
  37 + }
  38 + if (updateConsommationRequest.getPrix() != null) {
  39 + consommation.setPrix(updateConsommationRequest.getPrix());
  40 + }
  41 + consommationRepository.save(consommation);
  42 + return new ResponseEntity(consommation, HttpStatus.CREATED);
34 43 }
35 44  
36 45 @Override
  46 + @RestrictedTo("CONSO_ADD")
37 47 public ResponseEntity<?> updateConsommation(@Valid @RequestBody UpdateConsommationRequest updateConsommationRequest) {
38   - return null;
  48 + Consommation consommation = new Consommation();
  49 + return mergeConsommation(consommation, updateConsommationRequest);
39 50 }
40 51  
41 52 @Override
  53 + @RestrictedTo("CONSO_EDIT")
42 54 public ResponseEntity<?> updateConsommationById(@PathVariable Long consommationId, @Valid @RequestBody UpdateConsommationByIdRequest updateConsommationByIdRequest) {
43   - return null;
  55 + Consommation consommation = consommationRepository.findById(consommationId.intValue());
  56 + if (consommation == null) {
  57 + return generateError(HttpStatus.NOT_FOUND, "Consommation inconnue");
  58 + }
  59 + UpdateConsommationRequest updateConsommationRequest = new UpdateConsommationRequest();
  60 + updateConsommationRequest.setNom(updateConsommationByIdRequest.getNom());
  61 + updateConsommationRequest.setPrix(updateConsommationByIdRequest.getPrix());
  62 + return mergeConsommation(consommation, updateConsommationRequest);
44 63 }
45 64  
46 65 @Override
  66 + @RestrictedTo("CONSO_GET")
47 67 public ResponseEntity<?> getConsommationById(@PathVariable Long consommationId) {
48   - return null;
  68 + Consommation consommation = consommationRepository.findById(consommationId.intValue());
  69 + if (consommation == null) {
  70 + return generateError(HttpStatus.NOT_FOUND, "Consommation inconnue");
  71 + }
  72 + return new ResponseEntity(consommation, HttpStatus.OK);
49 73 }
50 74  
51 75 @Override
  76 + @RestrictedTo("CONSO_REMOVE")
52 77 public ResponseEntity<?> deleteConsommationById(@PathVariable Long consommationId) {
  78 + Consommation consommation = consommationRepository.findById(consommationId.intValue());
  79 + if (consommation == null) {
  80 + return generateError(HttpStatus.NOT_FOUND, "Consommation inconnue");
  81 + }
  82 + consommationRepository.delete(consommation);
  83 + return null;
  84 + }
  85 +
  86 + @Override
  87 + @RestrictedTo("CONSO_ACHAT")
  88 + public ResponseEntity<?> updateAchete(@PathVariable Long consommationId, @Valid @RequestBody UpdateAcheteRequest updateAcheteRequest) {
53 89 return null;
54 90 }
55 91 }
... ...
src/main/java/etunicorn/controller/PersonneController.java
... ... @@ -5,6 +5,7 @@ import etunicorn.entity.Personne;
5 5 import etunicorn.entity.Role;
6 6 import etunicorn.generated.model.UpdatePersonneByIdRequest;
7 7 import etunicorn.generated.model.UpdatePersonneRequest;
  8 +import etunicorn.generated.model.UpdateVirerRequest;
8 9 import etunicorn.repository.PersonneRepository;
9 10 import etunicorn.repository.RoleRepository;
10 11 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -101,7 +102,7 @@ public class PersonneController extends BaseController implements etunicorn.gene
101 102 @Override
102 103 @RestrictedTo("PERSONNE_GET")
103 104 public ResponseEntity<?> getPersonneById(@PathVariable BigDecimal idPersonne) {
104   - Personne personne = personneRepository.findById(idPersonne.intValueExact());
  105 + Personne personne = personneRepository.findById(idPersonne.intValue());
105 106 if (personne == null) {
106 107 return new ResponseEntity<Object>(HttpStatus.NOT_FOUND);
107 108 }
... ... @@ -111,7 +112,7 @@ public class PersonneController extends BaseController implements etunicorn.gene
111 112 @Override
112 113 @RestrictedTo("PERSONNE_EDIT")
113 114 public ResponseEntity<?> updatePersonneById(@PathVariable BigDecimal idPersonne, @Valid @RequestBody UpdatePersonneByIdRequest updatePersonneByIdRequest) {
114   - Personne personne = personneRepository.findById(idPersonne.intValueExact());
  115 + Personne personne = personneRepository.findById(idPersonne.intValue());
115 116 if (personne == null) {
116 117 return generateError(HttpStatus.NOT_FOUND, "Personne introuvable");
117 118 }
... ... @@ -126,7 +127,7 @@ public class PersonneController extends BaseController implements etunicorn.gene
126 127 @Override
127 128 @RestrictedTo("PERSONNE_REMOVE")
128 129 public ResponseEntity<?> deletePersonneById(@PathVariable BigDecimal idPersonne) {
129   - Personne personne = personneRepository.findById(idPersonne.intValueExact());
  130 + Personne personne = personneRepository.findById(idPersonne.intValue());
130 131  
131 132 if (personne == null) {
132 133 return new ResponseEntity<Object>(HttpStatus.NOT_FOUND);
... ... @@ -135,4 +136,8 @@ public class PersonneController extends BaseController implements etunicorn.gene
135 136 return new ResponseEntity<Object>(personne, HttpStatus.NO_CONTENT);
136 137 }
137 138  
  139 + @Override
  140 + public ResponseEntity<?> updateVirer(@PathVariable BigDecimal idPersonne, @Valid @RequestBody UpdateVirerRequest updateVirerRequest) {
  141 + return null;
  142 + }
138 143 }
... ...