From 0fd5cbb2e3529a37c4c0f625b48de31323330f3f Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Sun, 5 Feb 2017 23:27:44 +0100 Subject: [PATCH] Changements API & /consommation --- api.raml | 310 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/main/java/etunicorn/Application.java | 5 +++++ src/main/java/etunicorn/controller/ConsommationController.java | 46 +++++++++++++++++++++++++++++++++++++++++----- src/main/java/etunicorn/controller/PersonneController.java | 11 ++++++++--- 4 files changed, 198 insertions(+), 174 deletions(-) diff --git a/api.raml b/api.raml index 5c5acfe..6ad0a0a 100644 --- a/api.raml +++ b/api.raml @@ -51,53 +51,68 @@ version: v1 responses: 204: description: Déconnecté avec succès - 404: - description: Jeton non trouvé /personne: get: - description: Obtenir la liste des persones. Nécessite COMPTE_ADMIN + description: Obtenir la liste des persones. Nécessite PERSONNE_LIST. responses: 200: body: application/json: - example: | - [ - { - "id": 42, - "carte": "AAAAA", - "naissance": "855874800000", - "solde": 1337, - "login": "gbontoux", - "role": "etudiant" + post: + description: Ajoute une nouvelle personne. Nécessite PERSONNE_ADD. + body: + application/json: + schema: | + { + "type": "object", + "$schema": "http://json-schema.org/draft-03/schema", + "id": "http://jsonschema.net", + "required": true, + "properties": { + "carte": { + "type": "string", + "required": false, + "minLength": 14, + "maxLength": 14 + }, + "naissance": { + "type": "string", + "required": false, + "format": "date" + }, + "login": { + "type": "string", + "required": false + }, + "role": { + "type": "role", + "required": false + } } - ] + } + responses: + 201: + description: Personne ajoutée avec succès + body: + application/json: /{idPersonne}: uriParameters: idPersonne: - type: number + type: integer required: true description: ID de la personne minimum: 0 get: - description: Obtenir les infos sur une personne. Nécessite COMPTE_ADMIN + description: Obtenir les infos sur une personne. Nécessite PERSONNE_GET responses: 200: description: Utilisateur récupéré body: application/json: - example: | - { - "id": 42, - "carte": "AAAAA", - "naissance": "855874800000", - "solde": 1337, - "login": "gbontoux", - "role": "etudiant" - } 404: description: Utilisateur non trouvé put: - description: Modifer les infos d'une personne. Nécessite COMPTE_ADMIN + description: Modifer les infos d'une personne. Nécessite PERSONNE_EDIT body: application/json: schema: | @@ -134,56 +149,39 @@ version: v1 404: description: Utilisateur non trouvé delete: - description: Obtenir les infos sur une personne. Nécessite COMPTE_ADMIN + description: Supprime une personne. Nécessite PERSONNE_REMOVE responses: 204: description: Utilisateur supprimé 404: description: Utilisateur non trouvé - post: - description: Ajoute une nouvelle personne - body: - application/json: - schema: | - { - "type": "object", - "$schema": "http://json-schema.org/draft-03/schema", - "id": "http://jsonschema.net", - "required": true, - "properties": { - "carte": { - "type": "string", - "required": false, - "minLength": 14, - "maxLength": 14 - }, - "naissance": { - "type": "string", - "required": false, - "format": "date" - }, - "login": { - "type": "string", - "required": false - }, - "role": { - "type": "role", - "required": false - } - } - } - responses: - 201: - description: Personne ajoutée avec succès + /virer: + post: + description: Permet de créditer ou débiter un compte body: application/json: - example: | + schema: | { - "id": 42 + "type": "object", + "$schema": "http://json-schema.org/draft-03/schema", + "id": "http://jsonschema.net", + "required": true, + "properties": { + "prix": { + "type": "number", + "required": true + } + } } + responses: + 201: + description: La personne a bien été virée + 406: + description: La personne n'a pas assez de fonds pour être débitée + /role: get: - description: Liste les rôles. Nécessite ROLE_ADMIN + description: Liste les rôles. Nécessite ROLE_LIST responses: 200: body: @@ -198,16 +196,16 @@ version: v1 "nom": "bde", "permissions": [ { - "nom": "CREER_EVNMT" + "nom": "EVNMT_ADD" }, { - "nom": "SUPPRIMER_EVNMT" + "nom": "EVNMT_REMOVE" } ] } ] post: - description: Ajoute un nouveau rôle. Nécessite ROLE_ADMIN + description: Ajoute un nouveau rôle. Nécessite ROLE_ADD body: application/json: schema: | @@ -236,14 +234,14 @@ version: v1 required: true description: Nom du role delete: - description: Supprime un rôle. Nécessite ROLE_ADMIN + description: Supprime un rôle. Nécessite ROLE_REMOVE responses: 204: description: Rôle supprimé 404: description: Rôle inconnu post: - description: Ajoute une permission à un rôle. Nécessite ROLE_ADMIN + description: Ajoute une permission à un rôle. Nécessite ROLE_PERMISSION_ADD body: application/json: schema: | @@ -255,7 +253,8 @@ version: v1 "properties": { "nom": { "type": "string", - "required": true + "required": true, + "minLength": 3 } } } @@ -269,9 +268,9 @@ version: v1 nomPermission: type: string required: true - description: nom de la permission + description: Nom de la permission delete: - description: Enlève la permission du rôle. Nécessite ROLE_ADMIN + description: Enlève la permission du rôle. Nécessite ROLE_PERMISSION_REMOVE responses: 204: description: Permission enlevée avec succès @@ -279,7 +278,7 @@ version: v1 description: Permission ou rôle inconnu /permission: get: - description: Liste les permissions. Nécessite ROLE_ADMIN + description: Liste les permissions. Nécessite ROLE_LIST responses: 200: body: @@ -295,7 +294,7 @@ version: v1 ] /evenement: get: - description: Obtenir la liste de tout les evenements. Nécessite EVNMT_ADMIN ou EVNMT_ACHETER ou EVNMT_REMBOURSER + description: Obtenir la liste de tout les evenements. Nécessite EVNMT_LIST responses: 200: body: @@ -304,19 +303,19 @@ version: v1 [ { "id": 1, - "nom": "patate", + "nom": "WEC", "prix": 4, "date": "2001-09-11" }, { "id": 2, - "nom": "patate flambe", + "nom": "MidWork", "prix": 5, "date": "2001-09-11" } ] post: - description: Permet de creer un nouvel evenement. Nécessite EVNMT_ADMIN + description: Permet de creer un nouvel evenement. Nécessite EVNMT_ADD body: application/json: schema: | @@ -343,16 +342,16 @@ version: v1 } responses: 201: - - /{evenementId}: + description: L'évènement a bien été créé + /{idEvenement}: uriParameters: evenementId: type: integer required: true - description: id de l'evenement + description: ID de l'evenement minimum: 0 put: - description: Permet de modifier un évènement existant. Nécessite EVNMT_ADMIN + description: Permet de modifier un évènement existant. Nécessite EVNMT_EDIT body: application/json: schema: | @@ -375,15 +374,15 @@ version: v1 "required": false, "format": "date" } - } + } } responses: 202: - description: Modification pris en compte + description: Évènement modifié 404: description: L'evenement n'existe pas get: - description: Obtenir l'evenement {evenementId}. Nécessite EVNMT_ADMIN ou EVNMT_ACHETER ou EVNMT_REMBOURSER + description: Affiche l'évènement. Nécessite EVNMT_GET responses: 200: body: @@ -392,7 +391,7 @@ version: v1 [ { "id": 1, - "nom": "patate", + "nom": "WEC", "prix": 4, "date": "2001-09-11" } @@ -400,13 +399,13 @@ version: v1 404: description: Evenement non existant delete: - description: Permet de supprimer l'evenement {evenementId}. Nécessite EVNMT_ADMIN + description: Permet de supprimer l'evenement {evenementId}. Nécessite EVNMT_REMOVE responses: 200: description: L'evenement a été bien supprimé /participe: post: - description: Permet de notifier que quelqu'un a participer à l'evenement (id de la personne a envoyer) + description: Enregistre la participation de quelqu'un à un évènement body: application/json: schema: | @@ -424,12 +423,37 @@ version: v1 } responses: 201: - description: La personne est bien inscrite a cet evenement ou a bien était ajouté a la liste des participant + description: La participation a bien été enregistrée 402: - description: La personne n'a pas payé pour participer à l'evenement + description: La personne n'a pas payé pour participer à l'évènement + /reserve: + post: + description: Payer pour un évènement + body: + application/json: + schema: | + { + "type": "object", + "$schema": "http://json-schema.org/draft-03/schema", + "id": "http://jsonschema.net", + "required": true, + "properties": { + "participant": { + "type": "Personne", + "required": true + }, + "id": { + "type": "Evenement", + "required": true + } + } + } + responses: + 201: + description: L'evenement a bien été resérvé /consommation: get: - description: Obtenir la liste de toutes les consommations. Nécessite CONSO_ADMIN ou CONSO_ACHETER ou CONSO_REMBOURSER + description: Obtenir la liste de toutes les consommations. Nécessite CONSO_LIST responses: 200: body: @@ -448,7 +472,7 @@ version: v1 } ] post: - description: Permet de creer une nouvelle consommation. Nécessite CONSO_ADMIN + description: Permet de creer une nouvelle consommation. Nécessite CONSO_ADD body: application/json: schema: | @@ -470,7 +494,7 @@ version: v1 } responses: 201: - /{consommationId}: + /{idConsommation}: uriParameters: consommationId: type: integer @@ -525,6 +549,27 @@ version: v1 responses: 200: description: La consommation a été bien supprime + /achete: + post: + description: Achat d'une consomation (id) par un participant à un acteur + body: + application/json: + schema: | + { + "type": "object", + "$schema": "http://json-schema.org/draft-03/schema", + "id": "http://jsonschema.net", + "required": true, + "properties": { + "participant": { + "type": "Personne", + "required": true + } + } + } + responses: + 201: + description: La consommation a été bien payée /transaction: get: @@ -553,80 +598,13 @@ version: v1 "prix": -25.23 } ] - /consommation: - post: - description: Achat d'une consomation (id) par un participant à un acteur - body: - application/json: - schema: | - { - "type": "object", - "$schema": "http://json-schema.org/draft-03/schema", - "id": "http://jsonschema.net", - "required": true, - "properties": { - "participant": { - "type": "Personne", - "required": true - }, - "id": { - "type": "Consommation", - "required": true - } - } - } - responses: - 201: - description: La consommation a été bien payé - /evenement: - post: - body: - application/json: - schema: | - { - "type": "object", - "$schema": "http://json-schema.org/draft-03/schema", - "id": "http://jsonschema.net", - "required": true, - "properties": { - "participant": { - "type": "Personne", - "required": true - }, - "id": { - "type": "Evenement", - "required": true - } - } - } - responses: - 201: - description: L'evenement a bien été payé - /credit: - post: - description: Permet de recharger ou debiter un compte - body: - application/json: - schema: | - { - "type": "object", - "$schema": "http://json-schema.org/draft-03/schema", - "id": "http://jsonschema.net", - "required": true, - "properties": { - "participant": { - "type": "Personne", - "required": true - }, - "prix": { - "type": "number", - "required": true - } - } - } - responses: - 201: - description: La personne a bien été crédité + delete: + description: Annuler une transaction + responses: + 405: + description: Non implémenté + + /{idPersonne}: uriParameters: idPersonne: diff --git a/src/main/java/etunicorn/Application.java b/src/main/java/etunicorn/Application.java index c60c415..7609212 100644 --- a/src/main/java/etunicorn/Application.java +++ b/src/main/java/etunicorn/Application.java @@ -46,6 +46,11 @@ public class Application { permissionRepository.save(new Permission("ROLE_PERMISSION_ADD")); permissionRepository.save(new Permission("ROLE_PERMISSION_LIST")); permissionRepository.save(new Permission("ROLE_PERMISSION_REMOVE")); + permissionRepository.save(new Permission("CONSO_ADD")); + permissionRepository.save(new Permission("CONSO_EDIT")); + permissionRepository.save(new Permission("CONSO_GET")); + permissionRepository.save(new Permission("CONSO_LIST")); + permissionRepository.save(new Permission("CONSO_REMOVE")); // ... //roleRepository.save(new Role("admin", (List) permissionRepository.findAll())); diff --git a/src/main/java/etunicorn/controller/ConsommationController.java b/src/main/java/etunicorn/controller/ConsommationController.java index fefed86..3732647 100644 --- a/src/main/java/etunicorn/controller/ConsommationController.java +++ b/src/main/java/etunicorn/controller/ConsommationController.java @@ -1,6 +1,8 @@ package etunicorn.controller; +import etunicorn.RestrictedTo; import etunicorn.entity.Consommation; +import etunicorn.generated.model.UpdateAcheteRequest; import etunicorn.generated.model.UpdateConsommationByIdRequest; import etunicorn.generated.model.UpdateConsommationRequest; import etunicorn.repository.ConsommationRepository; @@ -24,32 +26,66 @@ public class ConsommationController extends BaseController implements etunicorn. ConsommationRepository consommationRepository; @Override + @RestrictedTo("CONSO_LIST") public ResponseEntity getConsommation() { return new ResponseEntity(this.consommationRepository.findAll(), HttpStatus.OK); } private ResponseEntity mergeConsommation(Consommation consommation, UpdateConsommationRequest updateConsommationRequest) { - // if (updateConsommationRequest.get) - return null; + if (updateConsommationRequest.getNom() != null) { + consommation.setNom(updateConsommationRequest.getNom()); + } + if (updateConsommationRequest.getPrix() != null) { + consommation.setPrix(updateConsommationRequest.getPrix()); + } + consommationRepository.save(consommation); + return new ResponseEntity(consommation, HttpStatus.CREATED); } @Override + @RestrictedTo("CONSO_ADD") public ResponseEntity updateConsommation(@Valid @RequestBody UpdateConsommationRequest updateConsommationRequest) { - return null; + Consommation consommation = new Consommation(); + return mergeConsommation(consommation, updateConsommationRequest); } @Override + @RestrictedTo("CONSO_EDIT") public ResponseEntity updateConsommationById(@PathVariable Long consommationId, @Valid @RequestBody UpdateConsommationByIdRequest updateConsommationByIdRequest) { - return null; + Consommation consommation = consommationRepository.findById(consommationId.intValue()); + if (consommation == null) { + return generateError(HttpStatus.NOT_FOUND, "Consommation inconnue"); + } + UpdateConsommationRequest updateConsommationRequest = new UpdateConsommationRequest(); + updateConsommationRequest.setNom(updateConsommationByIdRequest.getNom()); + updateConsommationRequest.setPrix(updateConsommationByIdRequest.getPrix()); + return mergeConsommation(consommation, updateConsommationRequest); } @Override + @RestrictedTo("CONSO_GET") public ResponseEntity getConsommationById(@PathVariable Long consommationId) { - return null; + Consommation consommation = consommationRepository.findById(consommationId.intValue()); + if (consommation == null) { + return generateError(HttpStatus.NOT_FOUND, "Consommation inconnue"); + } + return new ResponseEntity(consommation, HttpStatus.OK); } @Override + @RestrictedTo("CONSO_REMOVE") public ResponseEntity deleteConsommationById(@PathVariable Long consommationId) { + Consommation consommation = consommationRepository.findById(consommationId.intValue()); + if (consommation == null) { + return generateError(HttpStatus.NOT_FOUND, "Consommation inconnue"); + } + consommationRepository.delete(consommation); + return null; + } + + @Override + @RestrictedTo("CONSO_ACHAT") + public ResponseEntity updateAchete(@PathVariable Long consommationId, @Valid @RequestBody UpdateAcheteRequest updateAcheteRequest) { return null; } } diff --git a/src/main/java/etunicorn/controller/PersonneController.java b/src/main/java/etunicorn/controller/PersonneController.java index 7fbcb1f..eb6bff1 100644 --- a/src/main/java/etunicorn/controller/PersonneController.java +++ b/src/main/java/etunicorn/controller/PersonneController.java @@ -5,6 +5,7 @@ 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; @@ -101,7 +102,7 @@ public class PersonneController extends BaseController implements etunicorn.gene @Override @RestrictedTo("PERSONNE_GET") public ResponseEntity getPersonneById(@PathVariable BigDecimal idPersonne) { - Personne personne = personneRepository.findById(idPersonne.intValueExact()); + Personne personne = personneRepository.findById(idPersonne.intValue()); if (personne == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); } @@ -111,7 +112,7 @@ public class PersonneController extends BaseController implements etunicorn.gene @Override @RestrictedTo("PERSONNE_EDIT") public ResponseEntity updatePersonneById(@PathVariable BigDecimal idPersonne, @Valid @RequestBody UpdatePersonneByIdRequest updatePersonneByIdRequest) { - Personne personne = personneRepository.findById(idPersonne.intValueExact()); + Personne personne = personneRepository.findById(idPersonne.intValue()); if (personne == null) { return generateError(HttpStatus.NOT_FOUND, "Personne introuvable"); } @@ -126,7 +127,7 @@ public class PersonneController extends BaseController implements etunicorn.gene @Override @RestrictedTo("PERSONNE_REMOVE") public ResponseEntity deletePersonneById(@PathVariable BigDecimal idPersonne) { - Personne personne = personneRepository.findById(idPersonne.intValueExact()); + Personne personne = personneRepository.findById(idPersonne.intValue()); if (personne == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); @@ -135,4 +136,8 @@ public class PersonneController extends BaseController implements etunicorn.gene return new ResponseEntity(personne, HttpStatus.NO_CONTENT); } + @Override + public ResponseEntity updateVirer(@PathVariable BigDecimal idPersonne, @Valid @RequestBody UpdateVirerRequest updateVirerRequest) { + return null; + } } -- libgit2 0.21.2