From 62f0c210a907a3996d5c7d67849d8dccf83b3728 Mon Sep 17 00:00:00 2001 From: Clement FERRERE Date: Mon, 6 Dec 2021 09:23:12 +0100 Subject: [PATCH] Refacto + "Valider les types directement dans l'URL (quand possible)" --- .../Controllers/CollaborateursController.cs | 10 +++---- .../espacecollab.backend.api/Register.cs | 26 +++++++++++++++++++ .../espacecollab.backend.api/Startup.cs | 24 +++-------------- .../CollaborateurApiDto.cs | 13 +--------- .../Interfaces/IGenericIdSqlDto.cs | 2 +- .../IGenericsServices.cs | 15 +++++++++++ ...llab.backend.appservices.interfaces.csproj | 14 ++++++++++ .../GenericsServices.cs | 12 +++++---- .../IGenericsServices.cs | 15 ----------- .../espacecollab.backend.appservices.csproj | 1 + .../espacecollab.backend.sln | 11 ++++++-- 11 files changed, 83 insertions(+), 60 deletions(-) create mode 100644 Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs create mode 100644 Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/IGenericsServices.cs create mode 100644 Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/espacecollab.backend.appservices.interfaces.csproj delete mode 100644 Collaborateur_Epa_Back/espacecollab.backend.appservices/IGenericsServices.cs diff --git a/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/CollaborateursController.cs b/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/CollaborateursController.cs index 1dc4238..d6c7e49 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/CollaborateursController.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/CollaborateursController.cs @@ -21,7 +21,7 @@ namespace espacecollab.backend.api.Controllers return Ok(CollaborateursServices.GetAll()); } - [HttpGet("{collaborateurId}")] + [HttpGet("{collaborateurId:int:min(1)}")] public ActionResult GetCollaborateurById(int collaborateurId) { CollaborateurApiDto? collaborateur = CollaborateursServices.GetById(collaborateurId); @@ -41,7 +41,7 @@ namespace espacecollab.backend.api.Controllers return Ok(addedCollaborateur); } - [HttpDelete("delete")] + [HttpDelete("delete/{collaborateurId:int:min(1)}")] public ActionResult DeleteCollaborateur(int collaborateurId) { bool isCollaborateurDeleted = CollaborateursServices.Delete(collaborateurId); @@ -62,7 +62,7 @@ namespace espacecollab.backend.api.Controllers } - [HttpGet("businessunit/{businessId}")] + [HttpGet("businessunit/{businessId:int:min(1)}")] public ActionResult> GetCollaborateursByBusinessUnit(int businessId) { IEnumerable collaborateurs = CollaborateursServices.GetCollaborateursByBusinessUnit(businessId); @@ -72,7 +72,7 @@ namespace espacecollab.backend.api.Controllers return Ok(collaborateurs); } - [HttpGet("referrer/{referrerId}")] + [HttpGet("referrer/{referrerId:int:min(1)}")] public ActionResult> GetCollaborateursByReferrer(int referrerId) { IEnumerable collaborateurs = CollaborateursServices.GetCollaborateursByReferrer(referrerId); @@ -82,7 +82,7 @@ namespace espacecollab.backend.api.Controllers return Ok(collaborateurs); } - [HttpGet("apsidemail/{apsideMail}")] + [HttpGet("apsidemail/{apsideMail:minlength(1):regex(^\\S.*)}")] public ActionResult GetCollaborateurByApsideMail(string apsideMail) { CollaborateurApiDto? collaborateur = CollaborateursServices.GetCollaborateurByApsideMail(apsideMail); diff --git a/Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs b/Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs new file mode 100644 index 0000000..3357194 --- /dev/null +++ b/Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs @@ -0,0 +1,26 @@ +using espacecollab.backend.appservices; +using espacecollab.backend.infrastructure.fake; +using espacecollab.backend.infrastructure.interfaces; +using espacecollab.backend.infrastructure.sql; +using espacecollab.backend.infrastructure.sql.Options; +using espacecollab.backend.infrastructure.sql.Repository; + +namespace espacecollab.backend.api; + +internal static class Register +{ + public static void InjectDependencies(IServiceCollection services, SqlOption contextOptions) + { + services.AddScoped(); + + if (contextOptions.LoadFake) + { + services.AddScoped(); + } + else + { + services.AddScoped(); + services.AddScoped(); + } + } +} \ No newline at end of file diff --git a/Collaborateur_Epa_Back/espacecollab.backend.api/Startup.cs b/Collaborateur_Epa_Back/espacecollab.backend.api/Startup.cs index 0748fcf..1231a37 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.api/Startup.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.api/Startup.cs @@ -1,9 +1,4 @@ -using espacecollab.backend.appservices; -using espacecollab.backend.infrastructure.fake; -using espacecollab.backend.infrastructure.interfaces; -using espacecollab.backend.infrastructure.sql; -using espacecollab.backend.infrastructure.sql.Options; -using espacecollab.backend.infrastructure.sql.Repository; +using espacecollab.backend.infrastructure.sql.Options; namespace espacecollab.backend.api { @@ -20,26 +15,15 @@ namespace espacecollab.backend.api { IConfigurationSection sqlSection = Configuration.GetSection(SqlOption.Key); services.Configure(sqlSection); - SqlOption contextOptions = sqlSection.Get(); + SqlOption sqlOptions = sqlSection.Get(); services.AddControllers(); services.AddRouting(options => options.LowercaseUrls = true); - if (contextOptions.LoadFake) - { - services.AddScoped(); - } - else - { - services.AddScoped(); - } - - services.AddScoped(); - - services.AddScoped(); - services.AddEndpointsApiExplorer(); services.AddSwaggerGen(); + + Register.InjectDependencies(services, sqlOptions); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/CollaborateurApiDto.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/CollaborateurApiDto.cs index a181292..7b5ac19 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/CollaborateurApiDto.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/CollaborateurApiDto.cs @@ -1,4 +1,4 @@ -using espacecollab.backend.infrastructure.sql.dtos.Interfaces; +using espacecollab.backend.appservices.dtos.Interfaces; namespace espacecollab.backend.appservices.dtos { @@ -40,16 +40,5 @@ namespace espacecollab.backend.appservices.dtos ReferrerId = referrerId; BusinessUnitId = businessUnitId; } - - //public override CollaborateurSqlDto ToEntity() - //{ - // return new CollaborateurSqlDto(Id, Name, FirstName, BirthDate, Gender.ToEnumGenreSql(), Status.ToEnumStatutSql(), ChildrenNumber, - // Address, Telephone, PersonalMail, ApsideMail, ResignationDate, ReferrerId, BusinessUnitId); - //} - - //public override CollaborateurApiDto FromEntity(CollaborateurSqlDto entity) - //{ - // return this; - //} } } diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/Interfaces/IGenericIdSqlDto.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/Interfaces/IGenericIdSqlDto.cs index f15ba9c..af0c0ec 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/Interfaces/IGenericIdSqlDto.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/Interfaces/IGenericIdSqlDto.cs @@ -1,4 +1,4 @@ -namespace espacecollab.backend.infrastructure.sql.dtos.Interfaces +namespace espacecollab.backend.appservices.dtos.Interfaces { public interface IGenericIdApiDto { diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/IGenericsServices.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/IGenericsServices.cs new file mode 100644 index 0000000..83402d2 --- /dev/null +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/IGenericsServices.cs @@ -0,0 +1,15 @@ +using espacecollab.backend.appservices.dtos.Interfaces; + +namespace espacecollab.backend.appservices.interfaces +{ + public interface IGenericsServices where T : class, IGenericIdApiDto + { + T? Add(T apiDto); + + IEnumerable GetAll(); + + T? GetById(int id); + + T? Update(T apiDto); + } +} diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/espacecollab.backend.appservices.interfaces.csproj b/Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/espacecollab.backend.appservices.interfaces.csproj new file mode 100644 index 0000000..9e0ac7e --- /dev/null +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/espacecollab.backend.appservices.interfaces.csproj @@ -0,0 +1,14 @@ + + + + net6.0 + enable + enable + + + + + + + + diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices/GenericsServices.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices/GenericsServices.cs index 77429af..76715d8 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.appservices/GenericsServices.cs +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices/GenericsServices.cs @@ -1,13 +1,15 @@ -using espacecollab.backend.infrastructure.interfaces; +using espacecollab.backend.appservices.dtos.Interfaces; +using espacecollab.backend.appservices.interfaces; +using espacecollab.backend.infrastructure.interfaces; using espacecollab.backend.infrastructure.sql.dtos.Interfaces; namespace espacecollab.backend.appservices { - public abstract class GenericsServices where T : class, IGenericIdSqlDto - where TO : class, IGenericIdApiDto + public abstract class GenericsServices : IGenericsServices where T : class, IGenericIdSqlDto + where TO : class, IGenericIdApiDto { - Func MapperToApiDto { get; } - Func MapperToSqlDto { get; } + private Func MapperToApiDto { get; } + private Func MapperToSqlDto { get; } private IGenericRepository GenericRepository { get; } diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices/IGenericsServices.cs b/Collaborateur_Epa_Back/espacecollab.backend.appservices/IGenericsServices.cs deleted file mode 100644 index 3ba9193..0000000 --- a/Collaborateur_Epa_Back/espacecollab.backend.appservices/IGenericsServices.cs +++ /dev/null @@ -1,15 +0,0 @@ -using espacecollab.backend.infrastructure.sql.dtos.Interfaces; - -namespace espacecollab.backend.appservices -{ - public interface IGenericsServices where T : class, IGenericIdSqlDto - { - TO? Add(T entity); - - IEnumerable GetAll(); - - TO? GetById(int id); - - TO? Update(T entity); - } -} diff --git a/Collaborateur_Epa_Back/espacecollab.backend.appservices/espacecollab.backend.appservices.csproj b/Collaborateur_Epa_Back/espacecollab.backend.appservices/espacecollab.backend.appservices.csproj index 69235a9..098754d 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.appservices/espacecollab.backend.appservices.csproj +++ b/Collaborateur_Epa_Back/espacecollab.backend.appservices/espacecollab.backend.appservices.csproj @@ -8,6 +8,7 @@ + diff --git a/Collaborateur_Epa_Back/espacecollab.backend.sln b/Collaborateur_Epa_Back/espacecollab.backend.sln index bd0a931..0569be5 100644 --- a/Collaborateur_Epa_Back/espacecollab.backend.sln +++ b/Collaborateur_Epa_Back/espacecollab.backend.sln @@ -19,9 +19,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2 ApplicationsServices", "2 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4 Infrastructure", "4 Infrastructure", "{E29F5CA9-ABAF-4437-8633-49FF27110E6D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "espacecollab.backend.infrastructure.interfaces", "espacecollab.backend.infrastructure.interfaces\espacecollab.backend.infrastructure.interfaces.csproj", "{3E9E4801-D686-4581-8051-E0E1B036AC70}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "espacecollab.backend.infrastructure.interfaces", "espacecollab.backend.infrastructure.interfaces\espacecollab.backend.infrastructure.interfaces.csproj", "{3E9E4801-D686-4581-8051-E0E1B036AC70}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "espacecollab.backend.infrastructure.fake", "espacecollab.backend.infrastructure.fake\espacecollab.backend.infrastructure.fake.csproj", "{48253B9B-9B42-48CF-A95F-358171BABA74}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "espacecollab.backend.infrastructure.fake", "espacecollab.backend.infrastructure.fake\espacecollab.backend.infrastructure.fake.csproj", "{48253B9B-9B42-48CF-A95F-358171BABA74}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "espacecollab.backend.appservices.interfaces", "espacecollab.backend.appservices.interfaces\espacecollab.backend.appservices.interfaces.csproj", "{7872657E-46E2-44A1-AFA6-0D3B9E45084A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -57,6 +59,10 @@ Global {48253B9B-9B42-48CF-A95F-358171BABA74}.Debug|Any CPU.Build.0 = Debug|Any CPU {48253B9B-9B42-48CF-A95F-358171BABA74}.Release|Any CPU.ActiveCfg = Release|Any CPU {48253B9B-9B42-48CF-A95F-358171BABA74}.Release|Any CPU.Build.0 = Release|Any CPU + {7872657E-46E2-44A1-AFA6-0D3B9E45084A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7872657E-46E2-44A1-AFA6-0D3B9E45084A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7872657E-46E2-44A1-AFA6-0D3B9E45084A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7872657E-46E2-44A1-AFA6-0D3B9E45084A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -69,6 +75,7 @@ Global {26C08CE0-E6E5-4E03-8AEA-233F93218A3B} = {E29F5CA9-ABAF-4437-8633-49FF27110E6D} {3E9E4801-D686-4581-8051-E0E1B036AC70} = {E29F5CA9-ABAF-4437-8633-49FF27110E6D} {48253B9B-9B42-48CF-A95F-358171BABA74} = {E29F5CA9-ABAF-4437-8633-49FF27110E6D} + {7872657E-46E2-44A1-AFA6-0D3B9E45084A} = {CE5199B3-E423-46C1-B141-18C46473D964} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0A56A44C-135E-4CE4-834B-8DFDF69DC415}