/ *
* 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 Swashbuckle.AspNetCore.SwaggerGen ;
using Newtonsoft.Json ;
using System.ComponentModel.DataAnnotations ;
using IO.Swagger.Attributes ;
using IO.Swagger.Security ;
using Microsoft.AspNetCore.Authorization ;
using IO.Swagger.DTO ;
using EPAServeur.IServices ;
using EPAServeur.Models.Notes ;
using Microsoft.Extensions.Logging ;
using Microsoft.EntityFrameworkCore ;
using EPAServeur.Exceptions ;
using Microsoft.OpenApi.Expressions ;
using IO.Swagger.ClientCollaborateur ;
namespace IO.Swagger.Controllers
{
/// <summary>
///
/// </summary>
[ApiController]
public class NotesApiController : ControllerBase
{
private readonly INoteService noteService ;
private readonly ILogger < NotesApiController > logger ;
public NotesApiController ( INoteService _ noteService , ILogger < NotesApiController > _l ogger )
{
noteService = _ noteService ;
logger = _l ogger ;
}
/// <summary>
///
/// </summary>
/// <remarks>Supprimer une note</remarks>
/// <param name="idNote">id note</param>
/// <response code="204">Note supprimée</response>
/// <response code="403">Acces interdit</response>
/// <response code="404">Ressource n'a pas été trouvée</response>
[HttpDelete]
[Route("/api/notes/{idNote}/supprimer")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("DeleteNote")]
[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 IActionResult DeleteNote ( [ FromRoute ] [ Required ] long? idNote )
{
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(403, default(ErreurDTO));
try
{
logger . LogInformation ( "Suppresion de la note {idNote}" , idNote ) ;
noteService . SupprimerNote ( idNote ) ;
}
catch ( NoteNotFoundException )
{
logger . LogError ( "Impossible de supprimer la note d'id {idNote} car elle n'existe pas" , idNote ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = "404" ,
Message = "Aucune note trouvé"
} ;
return NotFound ( erreur ) ;
}
catch ( DbUpdateConcurrencyException ) {
logger . LogWarning ( "La note {idNote} n'a pas pu être supprimé car elle était prise par une autre ressource." , idNote ) ;
}
catch ( DbUpdateException )
{
logger . LogError ( "Une erreur a eu lieu, la note {idNote} n'a pas pu être supprimée." , idNote ) ;
}
catch ( Exception )
{
logger . LogError ( "Une erreur inconnue est survenue lors de la suppression de la note {idNote}" , idNote ) ;
}
logger . LogInformation ( "Note {idNote} supprimée avec sucès" , idNote ) ;
return NoContent ( ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Récupérer une note par son id</remarks>
/// <param name="idNote">id note</param>
/// <response code="200">OK</response>
/// <response code="403">Acces interdit</response>
/// <response code="404">Ressource n'a pas été trouvée</response>
[HttpGet]
[Route("/api/notes/{idNote}")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetNoteById")]
[SwaggerResponse(statusCode: 200, type: typeof(DetailsNoteDTO), 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 IActionResult GetNoteById ( [ FromRoute ] [ Required ] long? idNote )
{
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(403, default(ErreurDTO));
logger . LogInformation ( "Récupération de la note {idNote}" , idNote ) ;
DetailsNoteDTO note = null ;
try
{
note = noteService . GetNoteById ( idNote ) ;
}
catch ( NoteNotFoundException )
{
logger . LogError ( "Aucune note ne correspond à l'id {idNote} recherchée" , idNote ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = "404" ,
Message = "Aucune note n'a été trouvée"
} ;
return NotFound ( erreur ) ;
}
catch ( DbUpdateConcurrencyException )
{
logger . LogWarning ( "La note {idNote} n'a pas pu être récupérée car elle était prise par une autre ressource." , idNote ) ;
}
catch ( DbUpdateException )
{
logger . LogError ( "Une erreur a eu lieu, la note {idNote} n'a pas pu être récupérée." , idNote ) ;
}
catch ( Exception )
{
logger . LogError ( "Une erreur inconnue est survenue lors de la récupération de la note {idNote}" , idNote ) ;
}
logger . LogInformation ( "Note d'id {idNote} trouvée" , idNote ) ;
return Ok ( note ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Récupérer toutes les notes</remarks>
/// <param name="asc">Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d'éléments affiché sur chaque page du tableau</param>
/// <param name="texte">Texte permettant d'identifier l'objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s'effectue</param>
/// <response code="200">OK</response>
/// <response code="403">Acces interdit</response>
[HttpGet]
[Route("/api/notes/")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetNotes")]
[SwaggerResponse(statusCode: 200, type: typeof(List<AffichageNoteDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetNotes ( [ FromQuery ] [ Required ( ) ] bool? asc , [ FromQuery ] [ Required ( ) ] int? numPage , [ FromQuery ] [ Required ( ) ] int? parPAge , [ FromQuery ] string texte , [ FromQuery ] string tri )
{
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(200, default(List<AffichageNoteDTO>));
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(403, default(ErreurDTO));
throw new NotImplementedException ( ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Récupérer les notes d'une personne a écrite</remarks>
/// <param name="asc">Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)</param>
/// <param name="idReferent">id referent</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d'éléments affiché sur chaque page du tableau</param>
/// <param name="texte">Texte permettant d'identifier l'objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s'effectue</param>
/// <response code="200">OK</response>
/// <response code="403">Acces interdit</response>
/// <response code="404">Ressource n'a pas été trouvée</response>
[HttpGet]
[Route("/api/notes/auteur/{idReferent}")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetNotesByAuteur")]
[SwaggerResponse(statusCode: 200, type: typeof(List<AffichageNoteDTO>), 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 IActionResult GetNotesByAuteur ( [ FromQuery ] [ Required ( ) ] bool? asc , [ FromRoute ] [ Required ] Guid ? idReferent , [ FromQuery ] [ Required ( ) ] int? numPage , [ FromQuery ] [ Required ( ) ] int? parPAge , [ FromQuery ] string texte , [ FromQuery ] string tri )
{
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(403, default(ErreurDTO));
logger . LogInformation ( "Récupération des notes de l'auteur d'id {idReferent}" , idReferent ) ;
IEnumerable < AffichageNoteDTO > notes = null ;
try
{
notes = noteService . GetNotesByAuteur ( idReferent , asc , numPage , parPAge , texte , tri ) ;
}
catch ( ApiException )
{
logger . LogError ( "Une erreur est survenue lors de la discussion avec le service Collaborateur" ) ;
}
catch ( ReferentNotFoundException )
{
logger . LogError ( "Le référent {idReferent} n'a pas été trouvé" , idReferent ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = "404" ,
Message = "Aucun id ne correspond au référent"
} ;
return NotFound ( erreur ) ;
}
catch ( DbUpdateConcurrencyException )
{
logger . LogWarning ( "Les notes du référents {idReferent} n'ont pas pu être récupérées car une ou plusieurs notes sont prises par une autre ressource." , idReferent ) ;
}
catch ( DbUpdateException )
{
logger . LogError ( "Une erreur dans la base de données est survenue lors de la récupération des notes du référent {idRefrent}" , idReferent ) ;
}
catch ( Exception )
{
logger . LogError ( "Une erreur inconnue est survenue lors de la récupération des notes du référebt {idReferent}" , idReferent ) ;
}
logger . LogInformation ( "Liste des notes de l'auteur {idReferent} récupérée" , idReferent ) ;
return Ok ( notes ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Récupérer une note par son id</remarks>
/// <param name="asc">Préciser si les données sont dans l'ordre (true) ou dans l'ordre inverse (false)</param>
/// <param name="idCollaborateur">id collaborateur</param>
/// <param name="idReferent">id referent</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d'éléments affiché sur chaque page du tableau</param>
/// <param name="texte">Texte permettant d'identifier l'objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s'effectue</param>
/// <response code="200">OK</response>
/// <response code="403">Acces interdit</response>
/// <response code="404">Ressource n'a pas été trouvée</response>
[HttpGet]
[Route("/api/notes/auteur/{idReferent}/collaborateur/{idCollaborateur}")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("GetNotesByCollaborateur")]
[SwaggerResponse(statusCode: 200, type: typeof(List<AffichageNoteDTO>), 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 IActionResult GetNotesByCollaborateur ( [ FromQuery ] [ Required ( ) ] bool? asc , [ FromRoute ] [ Required ] Guid ? idCollaborateur , [ FromRoute ] [ Required ] Guid ? idReferent , [ FromQuery ] [ Required ( ) ] int? numPage , [ FromQuery ] [ Required ( ) ] int? parPAge , [ FromQuery ] string texte , [ FromQuery ] string tri )
{
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(403, default(ErreurDTO));
logger . LogInformation ( "Récupération des notes de l'auteur {idReferent} sur un collaborateur {idCollaborateur}" , idReferent , idCollaborateur ) ;
IEnumerable < AffichageNoteDTO > notes = null ;
try
{
notes = noteService . GetNotesByCollaborateur ( idReferent , idCollaborateur , asc , numPage , parPAge , texte , tri ) ;
}
catch ( ApiException )
{
logger . LogError ( "Une erreur est survenue lors de la discussion avec le service Collaborateur" ) ;
}
catch ( CollaborateurNotFoundException )
{
logger . LogError ( "Le référent {idReferent} n'a pas été trouvé" , idReferent ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = "404" ,
Message = "Aucun id ne correspond au référent"
} ;
return NotFound ( erreur ) ;
}
catch ( ReferentNotFoundException )
{
logger . LogError ( "Le collaborateur {idCollaborateur} n'a pas été trouvé" , idCollaborateur ) ;
ErreurDTO erreur = new ErreurDTO ( )
{
Code = "404" ,
Message = "Aucun id ne correspond au collaborateur"
} ;
return NotFound ( erreur ) ;
}
catch ( DbUpdateConcurrencyException )
{
logger . LogWarning ( "Les notes du référents {idReferent} n'ont pas pu être récupérées pour le collaborateur {idCollaborateur} car une ou plusieurs notes sont prises par une autre ressource" , idReferent , idCollaborateur ) ;
}
catch ( DbUpdateException )
{
logger . LogError ( "Une erreur a eu lieu dans la base de données lors de la récupération des notes du référent {idReferent} pour le collaborateur {idCollaborateur}." , idReferent , idCollaborateur ) ;
}
catch ( Exception )
{
logger . LogError ( "Une erreur inconnue a eu lieu lors de la récupération des notes du référent { idReferent} pour le collaborateur { idCollaborateur}." , idReferent , idCollaborateur ) ;
}
logger . LogInformation ( "Liste des notes de l'auteur {idReferent} sur un collaborateur {idCollaborateur} trouvée" , idReferent , idCollaborateur ) ;
return Ok ( notes ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Ajouter une nouvelle note</remarks>
/// <param name="body"></param>
/// <response code="201">Note créée avec succès</response>
/// <response code="403">Acces interdit</response>
[HttpPost]
[Route("/api/notes/nouvellenote")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("NouvelleNote")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult NouvelleNote ( [ FromBody ] DetailsNoteDTO body )
{
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(403, default(ErreurDTO));
logger . LogInformation ( "Ajout d'une nouvelle note" ) ;
DetailsNoteDTO nouvelleNote = null ;
try
{
nouvelleNote = noteService . AjouterNote ( body ) ;
}
catch ( NoteInvalideException ) { logger . LogWarning ( "Des données sont manquants, la nouvelle note 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 note" ) ; }
catch ( Exception ) { logger . LogError ( "Une erreur inconnue est survenue lors de l'ajout de la nouvelle note" ) ; }
logger . LogInformation ( "Nouvelle note ajoutée" ) ;
return Created ( "" , nouvelleNote ) ;
}
/// <summary>
///
/// </summary>
/// <remarks>Mettre à jour une note</remarks>
/// <param name="body"></param>
/// <param name="idNote">id note</param>
/// <response code="200">Note mise à jour avec succès</response>
/// <response code="201">Note créée avec succès</response>
/// <response code="403">Acces interdit</response>
[HttpPut]
[Route("/api/notes/{idNote}/updateNote")]
//[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState]
[SwaggerOperation("UpdateNote")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult UpdateNote ( [ FromBody ] DetailsNoteDTO body , [ FromRoute ] [ Required ] long? idNote )
{
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(403, default(ErreurDTO));
logger . LogInformation ( "Mise à jour de la note d'id {idNote}" , idNote ) ;
DetailsNoteDTO note = null ;
try
{
note = noteService . UpdateNote ( idNote , body ) ;
}
catch ( ApiException )
{
logger . LogError ( "Une erreur est survenue lors de la discussion avec le service Collaborateur" ) ;
}
catch ( NoteIdImcompatibleException )
{
logger . LogError ( "L'id de la note à mettre à jour {body.Id} et l'id de la note avec les nouvelels information {idNote} sont différents" , body . Id , idNote ) ;
}
catch ( NoteNotFoundException )
{
logger . LogError ( "La note {idNote} n'a pas pu être mise à jour car elle n'existe pas" , idNote ) ;
}
catch ( NoteInvalideException )
{
logger . LogWarning ( "Des données sont manquants, la note {idNote} ne peut pas être mise à jour" , idNote ) ;
}
catch ( DbUpdateConcurrencyException )
{
logger . LogError ( "La note {idNote} n'a pas pu être mise à jour car elle été prise par une autre ressource" , idNote ) ;
}
catch ( DbUpdateException )
{
logger . LogError ( "Une erreur est survenue dans la base de données lors de la mise à jour de la note {idNote}" , idNote ) ;
}
catch ( Exception ) {
logger . LogError ( "Une erreur inconnue est survenue lors de la mise à jour de la note {idNote}" , idNote ) ;
}
logger . LogInformation ( "Update effectué avec succès" ) ;
return Ok ( note ) ;
//TODO: Uncomment the next line to return response 201 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(201);
}
}
}