From f0928aae3bd82dd6c8845fa9a0d0a4e30678c7c1 Mon Sep 17 00:00:00 2001 From: yoannlgd Date: Tue, 4 Mar 2025 09:11:23 +0100 Subject: [PATCH] =?UTF-8?q?-=20Push=20des=20classes=20qui=20n'ont=20pas=20?= =?UTF-8?q?=C3=A9t=C3=A9=20jet=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ldap-cesi/Controllers/RoleController.cs | 84 +++++++++ ldap-cesi/DTOs/Generic/RoleDto.cs | 8 + ldap-cesi/DTOs/Inputs/Role/RoleCreateDto.cs | 6 + ldap-cesi/DTOs/Inputs/Role/RoleUpdateDto.cs | 7 + ldap-cesi/Services/Interfaces/IServiceBase.cs | 16 ++ ldap-cesi/Services/ServiceBase.cs | 178 ++++++++++++++++++ 6 files changed, 299 insertions(+) create mode 100644 ldap-cesi/Controllers/RoleController.cs create mode 100644 ldap-cesi/DTOs/Generic/RoleDto.cs create mode 100644 ldap-cesi/DTOs/Inputs/Role/RoleCreateDto.cs create mode 100644 ldap-cesi/DTOs/Inputs/Role/RoleUpdateDto.cs create mode 100644 ldap-cesi/Services/Interfaces/IServiceBase.cs create mode 100644 ldap-cesi/Services/ServiceBase.cs diff --git a/ldap-cesi/Controllers/RoleController.cs b/ldap-cesi/Controllers/RoleController.cs new file mode 100644 index 0000000..28d6554 --- /dev/null +++ b/ldap-cesi/Controllers/RoleController.cs @@ -0,0 +1,84 @@ +using Microsoft.AspNetCore.Mvc; +using ldap_cesi.DTOs.Inputs.Role; +using ldap_cesi.Services.Interfaces; +using System.Threading.Tasks; + +namespace ldap_cesi.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class RoleController : ControllerBase + { + private readonly IRoleService _roleService; + + public RoleController(IRoleService roleService) + { + _roleService = roleService; + } + + // GET: api/Role + [HttpGet] + public async Task GetAllRoles() + { + var result = await _roleService.GetAll(); + if (result.Success) + { + return Ok(result.Data); + } + return StatusCode(result.StatusCode, result.Message); + } + + // GET: api/Role/{id} + [HttpGet("{id}")] + public async Task GetRoleById(int id) + { + var result = await _roleService.GetById(id); + if (result.Success) + { + return Ok(result.Data); + } + return StatusCode(result.StatusCode, result.Message); + } + + // POST: api/Role + [HttpPost] + public async Task CreateRole([FromBody] RoleCreateDto roleDto) + { + var result = await _roleService.Create(roleDto); + if (result.Success) + { + return CreatedAtAction(nameof(GetRoleById), new { id = result.Data }, result.Data); + } + return StatusCode(result.StatusCode, result.Message); + } + + // PUT: api/Role/{id} + [HttpPut("{id}")] + public async Task UpdateRole(int id, [FromBody] RoleUpdateDto roleDto) + { + if (id != roleDto.Id) + { + return BadRequest("Role ID mismatch"); + } + + var result = await _roleService.Update(roleDto); + if (result.Success) + { + return NoContent(); + } + return StatusCode(result.StatusCode, result.Message); + } + + // DELETE: api/Role/{id} + [HttpDelete("{id}")] + public async Task DeleteRole(int id) + { + var result = await _roleService.Delete(id); + if (result.Success) + { + return NoContent(); + } + return StatusCode(result.StatusCode, result.Message); + } + } +} diff --git a/ldap-cesi/DTOs/Generic/RoleDto.cs b/ldap-cesi/DTOs/Generic/RoleDto.cs new file mode 100644 index 0000000..3465bd6 --- /dev/null +++ b/ldap-cesi/DTOs/Generic/RoleDto.cs @@ -0,0 +1,8 @@ +namespace ldap_cesi.DTOs; + +public class RoleDto +{ + public int Id { get; set; } + + public string Nom { get; set; } +} \ No newline at end of file diff --git a/ldap-cesi/DTOs/Inputs/Role/RoleCreateDto.cs b/ldap-cesi/DTOs/Inputs/Role/RoleCreateDto.cs new file mode 100644 index 0000000..59652a2 --- /dev/null +++ b/ldap-cesi/DTOs/Inputs/Role/RoleCreateDto.cs @@ -0,0 +1,6 @@ +namespace ldap_cesi.DTOs.Inputs.Role; + +public class RoleCreateDto +{ + public string Nom { get; set; } +} \ No newline at end of file diff --git a/ldap-cesi/DTOs/Inputs/Role/RoleUpdateDto.cs b/ldap-cesi/DTOs/Inputs/Role/RoleUpdateDto.cs new file mode 100644 index 0000000..c7b5b00 --- /dev/null +++ b/ldap-cesi/DTOs/Inputs/Role/RoleUpdateDto.cs @@ -0,0 +1,7 @@ +namespace ldap_cesi.DTOs.Inputs.Role; + +public class RoleUpdateDto +{ + public int Id { get; set; } + public string Nom { get; set; } +} \ No newline at end of file diff --git a/ldap-cesi/Services/Interfaces/IServiceBase.cs b/ldap-cesi/Services/Interfaces/IServiceBase.cs new file mode 100644 index 0000000..f1f4df4 --- /dev/null +++ b/ldap-cesi/Services/Interfaces/IServiceBase.cs @@ -0,0 +1,16 @@ +using ldap_cesi.Models; + +namespace ldap_cesi.Services.Interfaces; + +public interface IServiceBase + where T : class + where TDto : class + where TCreateDto : class + where TUpdateDto : class +{ + Task>> GetAll(); + Task> GetById(int id); + Task> Create(TCreateDto dto); + Task> Update(TUpdateDto dto); + Task> Delete(int id); +} \ No newline at end of file diff --git a/ldap-cesi/Services/ServiceBase.cs b/ldap-cesi/Services/ServiceBase.cs new file mode 100644 index 0000000..e560fd3 --- /dev/null +++ b/ldap-cesi/Services/ServiceBase.cs @@ -0,0 +1,178 @@ +using AutoMapper; +using ldap_cesi.DTOs.Inputs.Site; +using ldap_cesi.Entities; +using ldap_cesi.Models; +using ldap_cesi.Repository.Services; +using ldap_cesi.Services.Interfaces; +using ldap_cesi.Validator.Site; +using Microsoft.Extensions.Logging; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace ldap_cesi.Services; + +public class ServiceBase : IServiceBase + where T : class + where TDto : class + where TCreateDto : class + where TUpdateDto : class +{ + protected readonly IRepositoryBase _repository; + protected readonly IMapper _mapper; + protected readonly ILogger> _logger; + + public ServiceBase(IRepositoryBase repository, IMapper mapper, ILogger> logger) + { + _repository = repository; + _mapper = mapper; + _logger = logger; + } + + public virtual async Task>> GetAll() + { + try + { + var entities = await _repository.GetAllAsync(); + return new ResponseDataModel> + { + Success = true, + Data = entities, + StatusCode = 200, + Message = "Liste des entités récupérée avec succès." + }; + } + catch (Exception ex) + { + _logger.LogError(ex, "Une erreur s'est produite lors de la récupération des entités."); + return new ResponseDataModel> + { + Success = false, + Message = "Une erreur s'est produite lors de la récupération des entités.", + StatusCode = 500 + }; + } + } + + public virtual async Task> GetById(int id) + { + try + { + var entity = await _repository.GetByIdAsync(id); + if (entity == null) + { + return new ResponseDataModel + { + Success = false, + Message = $"Aucune entité trouvée avec l'identifiant {id}.", + StatusCode = 404 + }; + } + + return new ResponseDataModel + { + Success = true, + Data = entity, + StatusCode = 200, + Message = "Entité récupérée avec succès." + }; + } + catch (Exception ex) + { + _logger.LogError(ex, $"Une erreur s'est produite lors de la récupération de l'entité avec l'identifiant {id}."); + return new ResponseDataModel + { + Success = false, + Message = "Une erreur s'est produite lors de la récupération de l'entité.", + StatusCode = 500 + }; + } + } + + public virtual async Task> Create(TCreateDto dto) + { + try + { + var entity = _mapper.Map(dto); + var createdEntity = await _repository.AddAsync(entity); + return new ResponseDataModel + { + Success = createdEntity != null, + Data = createdEntity, + StatusCode = createdEntity != null ? 201 : 500, + Message = createdEntity != null ? "Entité créée avec succès." : "Échec de la création de l'entité." + }; + } + catch (Exception ex) + { + _logger.LogError(ex, "Une erreur s'est produite lors de la création de l'entité."); + return new ResponseDataModel + { + Success = false, + Message = "Une erreur s'est produite lors de la création de l'entité.", + StatusCode = 500 + }; + } + } + + public virtual async Task> Update(TUpdateDto dto) + { + try + { + var entity = _mapper.Map(dto); + bool isUpdated = await _repository.UpdateAsync(entity); + return new ResponseDataModel + { + Success = isUpdated, + Data = isUpdated ? entity : default, + StatusCode = isUpdated ? 200 : 500, + Message = isUpdated ? "Entité mise à jour avec succès." : "Échec de la mise à jour de l'entité." + }; + } + catch (Exception ex) + { + _logger.LogError(ex, "Une erreur s'est produite lors de la mise à jour de l'entité."); + return new ResponseDataModel + { + Success = false, + Message = "Une erreur s'est produite lors de la mise à jour de l'entité.", + StatusCode = 500 + }; + } + } + + public virtual async Task> Delete(int id) + { + try + { + var entity = await _repository.GetByIdAsync(id); + if (entity == null) + { + return new ResponseDataModel + { + Success = false, + Message = $"Aucune entité trouvée avec l'identifiant {id}.", + StatusCode = 404 + }; + } + + var isDeleted = await _repository.DeleteAsync(entity); + return new ResponseDataModel + { + Success = isDeleted, + Data = isDeleted ? id.ToString() : null, + StatusCode = isDeleted ? 200 : 500, + Message = isDeleted ? "Entité supprimée avec succès." : "Échec de la suppression de l'entité." + }; + } + catch (Exception ex) + { + _logger.LogError(ex, $"Une erreur s'est produite lors de la suppression de l'entité avec l'identifiant {id}."); + return new ResponseDataModel + { + Success = false, + Message = "Une erreur s'est produite lors de la suppression de l'entité.", + StatusCode = 500 + }; + } + } +} \ No newline at end of file