/* * API du serveur de l'application de digitalisation des EP * * API qui sra utilisée afin de faire communiquer le client et le serveur ainsi que le serveur et la boîte noire. * * OpenAPI spec version: 1.3.4 * * Generated by: https://github.com/swagger-api/swagger-codegen.git */ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using Swashbuckle.AspNetCore.Annotations; using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; using IO.Swagger.Attributes; using IO.Swagger.DTO; using EPAServeur.IServices; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using EPAServeur.Exceptions; using Microsoft.EntityFrameworkCore; namespace IO.Swagger.Controllers { /// /// /// [ApiController] public class FormationsApiController : ControllerBase { private readonly IFormationService formationService; private readonly ILogger logger; public FormationsApiController(IFormationService _formationService, ILogger _logger) { formationService = _formationService; logger = _logger; } /// /// /// /// Ajouter une nouvelle formation /// /// Formation créée avec succès /// Acces interdit [HttpPost] [Route("/api/formations")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("AjouterFormation")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task AjouterFormation([FromBody] FormationDTO body) { logger.LogInformation("Ajout d'une nouvelle formation."); FormationDTO nouvelleFormation = null; try { nouvelleFormation = await formationService.AddFormationAsync(body); } catch (FormationInvalidException) { logger.LogWarning("Des données sont manquants, la nouvelle formation ne peut pas être ajoutée."); } catch (DbUpdateException) { logger.LogError("Une erreur est survenue dans la base de données durant l'ajout de la nouvelle formation."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de l'ajout de la formation note."); } logger.LogInformation("Nouvelle formation ajoutée."); return Created("", nouvelleFormation); } /// /// /// /// Supprimer une formation /// id formation /// Formation supprimée avec succès /// Acces interdit [HttpDelete] [Route("/api/formations/{idFormation}/supprimer")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("DeleteFormation")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task DeleteFormation([FromRoute][Required] long? idFormation) { try { logger.LogInformation("Suppresion de la formation {idFormation}.", idFormation); FormationDTO formation = await formationService.DeleteFormationByIdAsync(idFormation); } catch (FormationIncompatibleIdException) { logger.LogError("Impossible de supprimer la formation car l'id de la formation passé en paramètre est null."); } catch (FormationNotFoundException) { logger.LogError("Impossible de supprimer la formation d'id {idFormation} car elle n'existe pas.", idFormation); ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucune formation trouvée" }; return NotFound(erreur); } catch (DbUpdateConcurrencyException) { logger.LogWarning("La formation {idFormation} n'a pas pu être supprimée car elle est prise par une autre ressource.", idFormation); } catch (DbUpdateException) { logger.LogError("Une erreur a eu lieu, la formation {idFormation} n'a pas pu être supprimée.", idFormation); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la suppression de la formation {idFormation}.", idFormation); } logger.LogInformation("Formation {idFormation} supprimée avec succès.", idFormation); return NoContent(); } /// /// /// /// Récupérer les formations annulées /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false) /// Numéro de la page du tableau qui affiche les données /// Nombre d'éléments affiché sur chaque page du tableau /// id de l'agence à laquelle sont rattachées les données à récupérer /// Texte permettant d'identifier l'objet rechercher /// Colonne du tableau sur lequel le tri s'effectue /// OK /// Acces interdit /// Ressource n'a pas été trouvée [HttpGet] [Route("/api/formations/annulees")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetFormationAnnulees")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] public virtual async Task GetFormationAnnulees([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri) { logger.LogInformation("Récupération de la liste des formations annulées."); IEnumerable formations = null; try { formations = await formationService.GetFormationAnnuleesAsync(asc, numPage, parPAge, idAgence, texte, tri); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des formations annulées est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des formations annulées."); } if (formations == null) { ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucune formation annulée" }; return NotFound(erreur); } logger.LogInformation("Liste des formations annulées récupérée."); return Ok(formations); } /// /// /// /// Récupérer une formation par son id /// id formation /// OK /// Acces interdit /// Ressource n'a pas été trouvée [HttpGet] [Route("/api/formations/{idFormation}")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetFormationById")] [SwaggerResponse(statusCode: 200, type: typeof(FormationDTO), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] public virtual async Task GetFormationById([FromRoute][Required] long? idFormation) { logger.LogInformation("Récupération de la formation {idFormation}.", idFormation); FormationDTO formationDTO = null; try { formationDTO = await formationService.GetFormationByIdAsync(idFormation); } catch (FormationNotFoundException) { logger.LogError("Aucune formation ne correspond à l'id {idFormation} recherchée.", idFormation); ErreurDTO erreurDTO = new ErreurDTO() { Code = "404", Message = "La formation n'existe pas", }; return NotFound(erreurDTO); } catch (DbUpdateConcurrencyException) { logger.LogWarning("La formation {idFormation} n'a pas pu être récupérée car elle est prise par une autre ressource.", idFormation); } catch (DbUpdateException) { logger.LogError("Une erreur a eu lieu, la formation {idFormation} n'a pas pu être récupérée.", idFormation); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la formation {idFormation}.", idFormation); } logger.LogInformation("Formation {idFormation} récupérée.", idFormation); return Ok(formationDTO); } /// /// /// /// Récupérer les formations réalisées /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false) /// Numéro de la page du tableau qui affiche les données /// Nombre d'éléments affiché sur chaque page du tableau /// id de l'agence à laquelle sont rattachées les données à récupérer /// Texte permettant d'identifier l'objet rechercher /// Colonne du tableau sur lequel le tri s'effectue /// OK /// Acces interdit /// Ressource n'a pas été trouvée [HttpGet] [Route("/api/formations/realisees")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetFormationRealisee")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] public virtual async Task GetFormationRealisee([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri) { logger.LogInformation("Récupération de la liste des formations réalisées."); IEnumerable formations = null; try { formations = await formationService.GetFormationRealiseesAsync(asc, numPage, parPAge, idAgence, texte, tri); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des formations réalisées est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des formations réalisées."); } if (formations == null) { ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucune formation réalisée" }; return NotFound(erreur); } logger.LogInformation("Liste des formations réalisées récupérée."); return Ok(formations); } /// /// /// /// Récupérer la liste des formations /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false) /// Numéro de la page du tableau qui affiche les données /// Nombre d'éléments affiché sur chaque page du tableau /// id de l'agence à laquelle sont rattachées les données à récupérer /// Statut de la formation /// Texte permettant d'identifier l'objet rechercher /// Colonne du tableau sur lequel le tri s'effectue /// OK /// Acces interdit [HttpGet] [Route("/api/formations")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetFormations")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task GetFormations([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] int? statutFormation, [FromQuery] string texte, [FromQuery] string tri) { logger.LogInformation("Récupération de la liste des formations."); IEnumerable formations = null; try { formations = await formationService.GetFormationsAsync(asc, numPage, parPAge, idAgence, statutFormation, texte, tri); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des formations est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des formations."); } if (formations == null) { ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucune formation" }; return NotFound(erreur); } logger.LogInformation("Liste des formations récupérée."); return Ok(formations); } /// /// /// /// Récupérer les modes de formation /// OK /// Acces interdit [HttpGet] [Route("/api/modesFormation")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetModesFormation")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task GetModesFormation() { logger.LogInformation("Récupération de la liste des modes de formation."); IEnumerable modeFormations = null; try { modeFormations = await formationService.GetModesFormationAsync(); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des modes de formation est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des modes de formation."); } if (modeFormations == null) { ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucun mode de formation" }; return NotFound(erreur); } logger.LogInformation("Liste des modes de formation récupérée."); return Ok(modeFormations); } /// /// /// /// Récupérer les origines de formation /// OK /// Acces interdit [HttpGet] [Route("/api/originesFormation")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetOriginesFormation")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task GetOriginesFormation() { logger.LogInformation("Récupération de la liste des origines de formation."); IEnumerable origineFormations = null; try { origineFormations = await formationService.GetOriginesFormationAsync(); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des origines de formation est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des origines de formation."); } if (origineFormations == null) { ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucune origine de formation" }; return NotFound(erreur); } logger.LogInformation("Liste des origines de formation récupérée."); return Ok(origineFormations); } /// /// /// /// Récupérer les formations plannifié et replannifié /// Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false) /// Numéro de la page du tableau qui affiche les données /// Nombre d'éléments affiché sur chaque page du tableau /// id de l'agence à laquelle sont rattachées les données à récupérer /// Texte permettant d'identifier l'objet rechercher /// Colonne du tableau sur lequel le tri s'effectue /// OK /// Acces interdit /// Ressource n'a pas été trouvée [HttpGet] [Route("/api/formations/prochaines")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetProchainesFormation")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n'a pas été trouvée")] public virtual async Task GetProchainesFormation([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri) { logger.LogInformation("Récupération de la liste des prochaines formations."); IEnumerable formations = null; try { formations = await formationService.GetProchainesFormationAsync(asc, numPage, parPAge, idAgence, texte, tri); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des prochaines formations est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des prochaines formations."); } if (formations == null) { ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucune prochaine formation" }; return NotFound(erreur); } logger.LogInformation("Liste des prochaines formations récupérée."); return Ok(formations); } /// /// /// /// Récupérer les statuts de formation /// OK /// Acces interdit [HttpGet] [Route("/api/statutsFormation")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetStatutsFormation")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task GetStatutsFormation() { logger.LogInformation("Récupération de la liste des statuts de formation."); IEnumerable statutFormations = null; try { statutFormations = await formationService.GetStatutsFormationAsync(); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des statuts de formation est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des statuts de formation."); } if (statutFormations == null) { ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucun statut de formation" }; return NotFound(erreur); } logger.LogInformation("Liste des statuts de formation récupérée."); return Ok(statutFormations); } /// /// /// /// Récupérer les types de formation /// OK /// Acces interdit [HttpGet] [Route("/api/typesFormation")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("GetTypesFormation")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "OK")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task GetTypesFormation() { logger.LogInformation("Récupération de la liste des types de formation."); IEnumerable typeFormations = null; try { typeFormations = await formationService.GetTypesFormationAsync(); } catch (ArgumentNullException) { logger.LogError("Un des arguments passés dans la requête pour récupérer la liste des types de formation est invalide."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des types de formation."); } if (typeFormations == null) { ErreurDTO erreur = new ErreurDTO() { Code = "404", Message = "Aucun type de formation" }; return NotFound(erreur); } logger.LogInformation("Liste des types de formation récupérée."); return Ok(typeFormations); } /// /// /// /// Mettre à jour une formation /// /// id formation /// formation mise à jour /// Formation créée avec succès /// Acces interdit [HttpPut] [Route("/api/formations/{idFormation}/update")] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] [ValidateModelState] [SwaggerOperation("UpdateFormation")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] public virtual async Task UpdateFormation([FromBody] FormationDTO body, [FromRoute][Required] long? idFormation) { logger.LogInformation("Mise à jour de la formation d'id {idFormation}.", idFormation); FormationDTO formation = null; try { formation = await formationService.UpdateFormationAsync(idFormation, body); } catch (FormationInvalidException) { logger.LogWarning("Des données sont manquants, la formation {idFormation} ne peut pas être mise à jour.", idFormation); } catch (FormationIncompatibleIdException) { logger.LogError("L'id de la formation à mettre à jour {body.Id} et l'id de la formation avec les nouvelles informations {idFormation} sont différents.", body.Id, idFormation); } catch (DbUpdateConcurrencyException) { logger.LogError("La formation {idFormation} n'a pas pu être mise à jour car elle est prise par une autre ressource.", idFormation); } catch (DbUpdateException) { logger.LogError("Une erreur est survenue dans la base de données lors de la mise à jour de la formation {idFormation}.", idFormation); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de la mise à jour de la formation {idFormation}.", idFormation); } if (formation == null) { try { formation = await formationService.AddFormationAsync(body); } catch (FormationInvalidException) { logger.LogWarning("Des données sont manquants, la nouvelle formation ne peut pas être ajoutée."); } catch (DbUpdateException) { logger.LogError("Une erreur est survenue dans la base de données durant l'ajout de la nouvelle formation."); } catch (Exception) { logger.LogError("Une erreur inconnue est survenue lors de l'ajout de la formation note."); } logger.LogInformation("Nouvelle formation ajoutée."); return Created("", formation); } logger.LogInformation("Update effectué avec succès"); return Ok(formation); } } }