diff --git a/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/AgenceController.cs b/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/AgencesController.cs similarity index 53% rename from Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/AgenceController.cs rename to Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/AgencesController.cs index dc96075..be84b16 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/AgenceController.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/AgencesController.cs @@ -3,9 +3,9 @@ using espacecollab.backend.appservices.dtos; namespace espacecollab.backend.api.Controllers { - public class AgenceController : BaseController + public class AgencesController : BaseController { - public AgenceController(AgenceService agenceService) : base(agenceService) + public AgencesController(AgenceServices agenceService) : base(agenceService) { } } diff --git a/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/BusinessUnitsController.cs b/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/BusinessUnitsController.cs new file mode 100644 index 0000000..60fa49b --- /dev/null +++ b/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/BusinessUnitsController.cs @@ -0,0 +1,28 @@ +using espacecollab.backend.appservices; +using espacecollab.backend.appservices.dtos; +using Microsoft.AspNetCore.Mvc; + +namespace espacecollab.backend.api.Controllers +{ + //[Route("api/[controller]")] + //[ApiController] + public class BusinessUnitsController : BaseController + { + private BusinessUnitServices BusinessUnitServices { get; } + + public BusinessUnitsController(BusinessUnitServices businessUnitServices) : base(businessUnitServices) + { + BusinessUnitServices = businessUnitServices; + } + + [HttpGet("agence/{agenceId:int:min(1)}")] + public ActionResult> GetBusinessUnitsByAgence(uint agenceId) + { + IEnumerable businessUnits = BusinessUnitServices.GetBusinessUnitsByAgence(agenceId); + if (!businessUnits.Any()) + return NotFound(); + + return Ok(businessUnits); + } + } +} diff --git a/Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs b/Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs index 4616de7..5c2b55f 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs @@ -13,7 +13,8 @@ internal static class Register { services.AddCors(); services.AddScoped(); - services.AddScoped(); + services.AddScoped(); + services.AddScoped(); if (contextOptions.LoadFake) { @@ -25,6 +26,7 @@ internal static class Register services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); } } } \ No newline at end of file diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/BusinessUnitApiDto.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/BusinessUnitApiDto.cs new file mode 100644 index 0000000..9f48eaa --- /dev/null +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/BusinessUnitApiDto.cs @@ -0,0 +1,8 @@ +using espacecollab.backend.appservices.dtos.Interfaces; + +namespace espacecollab.backend.appservices.dtos; + +public record BusinessUnitApiDto(uint Id, string Name, int AgenceId) : IGenericIdApiDto +{ + public uint Id { get; set; } = Id; +} \ No newline at end of file diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/Mappers/BusinessUnitMapper.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/Mappers/BusinessUnitMapper.cs new file mode 100644 index 0000000..01823d2 --- /dev/null +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/Mappers/BusinessUnitMapper.cs @@ -0,0 +1,15 @@ +using espacecollab.backend.infrastructure.sql.dtos; + +namespace espacecollab.backend.appservices.dtos.Mappers; + +public static class BusinessUnitMapper +{ + public static BusinessUnitApiDto ToApi(this BusinessUnitSqlDto agenceSqlDto) + { + return new BusinessUnitApiDto((uint)agenceSqlDto.Id, agenceSqlDto.Name,agenceSqlDto.AgenceId); + } + public static BusinessUnitSqlDto ToSql(this BusinessUnitApiDto agenceApiDto) + { + return new BusinessUnitSqlDto((int)agenceApiDto.Id, agenceApiDto.Name, agenceApiDto.AgenceId); + } +} \ No newline at end of file diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices/AgenceService.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices/AgenceServices.cs similarity index 71% rename from Collaborateur_Epa_Back/espacecollab.backend.appservices/AgenceService.cs rename to Collaborateur_Epa_Back/espacecollab.backend.appservices/AgenceServices.cs index fb7bfef..defd0b7 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.appservices/AgenceService.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices/AgenceServices.cs @@ -5,9 +5,9 @@ using espacecollab.backend.infrastructure.sql.dtos; namespace espacecollab.backend.appservices; -public class AgenceService : GenericsServices +public class AgenceServices : GenericsServices { - public AgenceService(IAgenceRepository agenceRepository) + public AgenceServices(IAgenceRepository agenceRepository) :base(agenceRepository, AgenceMapper.ToApi, AgenceMapper.ToSql) { } diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices/BusinessUnitServices.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices/BusinessUnitServices.cs new file mode 100644 index 0000000..10e4df5 --- /dev/null +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices/BusinessUnitServices.cs @@ -0,0 +1,19 @@ +using espacecollab.backend.appservices.dtos; +using espacecollab.backend.appservices.dtos.Mappers; +using espacecollab.backend.infrastructure.interfaces; +using espacecollab.backend.infrastructure.sql.dtos; + +namespace espacecollab.backend.appservices; + +public class BusinessUnitServices : GenericsServices +{ + private IBusinessUnitRepository BusinessUnitRepository { get; } + public BusinessUnitServices(IBusinessUnitRepository businessUnitRepository) + :base(businessUnitRepository, BusinessUnitMapper.ToApi, BusinessUnitMapper.ToSql) + {} + + public IEnumerable GetBusinessUnitsByAgence(uint agenceId) + { + return BusinessUnitRepository.GetBusinessUnitsByAgence((int)agenceId).Select(bu => bu.ToApi()); + } +} \ No newline at end of file diff --git a/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.interfaces/IBusinessUnitRepository.cs b/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.interfaces/IBusinessUnitRepository.cs index 42a10fd..08700a5 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.interfaces/IBusinessUnitRepository.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.interfaces/IBusinessUnitRepository.cs @@ -4,5 +4,6 @@ namespace espacecollab.backend.infrastructure.interfaces { public interface IBusinessUnitRepository : IGenericRepository { + public IList GetBusinessUnitsByAgence(int agenceId); } } \ No newline at end of file diff --git a/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/MainDbContext.cs b/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/MainDbContext.cs index 247426c..9077ed2 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/MainDbContext.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/MainDbContext.cs @@ -8,6 +8,8 @@ namespace espacecollab.backend.infrastructure.sql { private IOptions SqlSettings { get; } private DbSet? Collaborateur { get; set; } + private DbSet? Agence { get; set; } + private DbSet? BusinessUnit { get; set; } public MainDbContext(IOptions sqlSettings) { @@ -23,6 +25,8 @@ namespace espacecollab.backend.infrastructure.sql protected override void OnModelCreating(ModelBuilder modelBuilder) { + modelBuilder.Entity().Property(p => p.Id).UseMySqlIdentityColumn(); + modelBuilder.Entity().Property(p => p.Id).UseMySqlIdentityColumn(); modelBuilder.Entity().Property(p=> p.Id).UseMySqlIdentityColumn(); modelBuilder .Entity() diff --git a/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/Repository/BusinessUnitSqlRepository.cs b/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/Repository/BusinessUnitSqlRepository.cs new file mode 100644 index 0000000..34fdd60 --- /dev/null +++ b/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/Repository/BusinessUnitSqlRepository.cs @@ -0,0 +1,13 @@ +using espacecollab.backend.infrastructure.interfaces; +using espacecollab.backend.infrastructure.sql.dtos; + +namespace espacecollab.backend.infrastructure.sql.Repository; + +public class BusinessUnitSqlRepository : GenericSqlRepository, IBusinessUnitRepository +{ + public BusinessUnitSqlRepository(MainDbContext context) : base(context) + { + } + public IList GetBusinessUnitsByAgence(int agenceId) + => Context.Set().Where(bu => bu.AgenceId == agenceId).ToList(); +} \ No newline at end of file diff --git a/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/Repository/GenericSqlRepository.cs b/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/Repository/GenericSqlRepository.cs index 77d9023..384c963 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/Repository/GenericSqlRepository.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.infrastructure.sql/Repository/GenericSqlRepository.cs @@ -15,7 +15,7 @@ namespace espacecollab.backend.infrastructure.sql.Repository public virtual T? Add(T entity) { - Context.Set().Add(entity); + Context.Set().Add(entity); Context.SaveChanges(); return entity;