Refacto + "Valider les types directement dans l'URL (quand possible)"

pull/2/head
Clement FERRERE 3 years ago
parent 4c7647ac27
commit 62f0c210a9
  1. 10
      Collaborateur_Epa_Back/espacecollab.backend.api/Controllers/CollaborateursController.cs
  2. 26
      Collaborateur_Epa_Back/espacecollab.backend.api/Register.cs
  3. 24
      Collaborateur_Epa_Back/espacecollab.backend.api/Startup.cs
  4. 13
      Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/CollaborateurApiDto.cs
  5. 2
      Collaborateur_Epa_Back/espacecollab.backend.appservices.dtos/Interfaces/IGenericIdSqlDto.cs
  6. 15
      Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/IGenericsServices.cs
  7. 14
      Collaborateur_Epa_Back/espacecollab.backend.appservices.interfaces/espacecollab.backend.appservices.interfaces.csproj
  8. 12
      Collaborateur_Epa_Back/espacecollab.backend.appservices/GenericsServices.cs
  9. 15
      Collaborateur_Epa_Back/espacecollab.backend.appservices/IGenericsServices.cs
  10. 1
      Collaborateur_Epa_Back/espacecollab.backend.appservices/espacecollab.backend.appservices.csproj
  11. 11
      Collaborateur_Epa_Back/espacecollab.backend.sln

@ -21,7 +21,7 @@ namespace espacecollab.backend.api.Controllers
return Ok(CollaborateursServices.GetAll()); return Ok(CollaborateursServices.GetAll());
} }
[HttpGet("{collaborateurId}")] [HttpGet("{collaborateurId:int:min(1)}")]
public ActionResult<CollaborateurApiDto> GetCollaborateurById(int collaborateurId) public ActionResult<CollaborateurApiDto> GetCollaborateurById(int collaborateurId)
{ {
CollaborateurApiDto? collaborateur = CollaborateursServices.GetById(collaborateurId); CollaborateurApiDto? collaborateur = CollaborateursServices.GetById(collaborateurId);
@ -41,7 +41,7 @@ namespace espacecollab.backend.api.Controllers
return Ok(addedCollaborateur); return Ok(addedCollaborateur);
} }
[HttpDelete("delete")] [HttpDelete("delete/{collaborateurId:int:min(1)}")]
public ActionResult DeleteCollaborateur(int collaborateurId) public ActionResult DeleteCollaborateur(int collaborateurId)
{ {
bool isCollaborateurDeleted = CollaborateursServices.Delete(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<IEnumerable<CollaborateurApiDto>> GetCollaborateursByBusinessUnit(int businessId) public ActionResult<IEnumerable<CollaborateurApiDto>> GetCollaborateursByBusinessUnit(int businessId)
{ {
IEnumerable<CollaborateurApiDto> collaborateurs = CollaborateursServices.GetCollaborateursByBusinessUnit(businessId); IEnumerable<CollaborateurApiDto> collaborateurs = CollaborateursServices.GetCollaborateursByBusinessUnit(businessId);
@ -72,7 +72,7 @@ namespace espacecollab.backend.api.Controllers
return Ok(collaborateurs); return Ok(collaborateurs);
} }
[HttpGet("referrer/{referrerId}")] [HttpGet("referrer/{referrerId:int:min(1)}")]
public ActionResult<IEnumerable<CollaborateurApiDto>> GetCollaborateursByReferrer(int referrerId) public ActionResult<IEnumerable<CollaborateurApiDto>> GetCollaborateursByReferrer(int referrerId)
{ {
IEnumerable<CollaborateurApiDto> collaborateurs = CollaborateursServices.GetCollaborateursByReferrer(referrerId); IEnumerable<CollaborateurApiDto> collaborateurs = CollaborateursServices.GetCollaborateursByReferrer(referrerId);
@ -82,7 +82,7 @@ namespace espacecollab.backend.api.Controllers
return Ok(collaborateurs); return Ok(collaborateurs);
} }
[HttpGet("apsidemail/{apsideMail}")] [HttpGet("apsidemail/{apsideMail:minlength(1):regex(^\\S.*)}")]
public ActionResult<CollaborateurApiDto> GetCollaborateurByApsideMail(string apsideMail) public ActionResult<CollaborateurApiDto> GetCollaborateurByApsideMail(string apsideMail)
{ {
CollaborateurApiDto? collaborateur = CollaborateursServices.GetCollaborateurByApsideMail(apsideMail); CollaborateurApiDto? collaborateur = CollaborateursServices.GetCollaborateurByApsideMail(apsideMail);

@ -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<CollaborateursServices>();
if (contextOptions.LoadFake)
{
services.AddScoped<ICollaborateurRepository, FakeCollaborateurRepository>();
}
else
{
services.AddScoped<MainDbContext>();
services.AddScoped<ICollaborateurRepository, CollaborateurSqlRepository>();
}
}
}

@ -1,9 +1,4 @@
using espacecollab.backend.appservices; using espacecollab.backend.infrastructure.sql.Options;
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 namespace espacecollab.backend.api
{ {
@ -20,26 +15,15 @@ namespace espacecollab.backend.api
{ {
IConfigurationSection sqlSection = Configuration.GetSection(SqlOption.Key); IConfigurationSection sqlSection = Configuration.GetSection(SqlOption.Key);
services.Configure<SqlOption>(sqlSection); services.Configure<SqlOption>(sqlSection);
SqlOption contextOptions = sqlSection.Get<SqlOption>(); SqlOption sqlOptions = sqlSection.Get<SqlOption>();
services.AddControllers(); services.AddControllers();
services.AddRouting(options => options.LowercaseUrls = true); services.AddRouting(options => options.LowercaseUrls = true);
if (contextOptions.LoadFake)
{
services.AddScoped<ICollaborateurRepository, FakeCollaborateurRepository>();
}
else
{
services.AddScoped<ICollaborateurRepository, CollaborateurSqlRepository>();
}
services.AddScoped<CollaborateursServices>();
services.AddScoped<MainDbContext>();
services.AddEndpointsApiExplorer(); services.AddEndpointsApiExplorer();
services.AddSwaggerGen(); services.AddSwaggerGen();
Register.InjectDependencies(services, sqlOptions);
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

@ -1,4 +1,4 @@
using espacecollab.backend.infrastructure.sql.dtos.Interfaces; using espacecollab.backend.appservices.dtos.Interfaces;
namespace espacecollab.backend.appservices.dtos namespace espacecollab.backend.appservices.dtos
{ {
@ -40,16 +40,5 @@ namespace espacecollab.backend.appservices.dtos
ReferrerId = referrerId; ReferrerId = referrerId;
BusinessUnitId = businessUnitId; 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;
//}
} }
} }

@ -1,4 +1,4 @@
namespace espacecollab.backend.infrastructure.sql.dtos.Interfaces namespace espacecollab.backend.appservices.dtos.Interfaces
{ {
public interface IGenericIdApiDto public interface IGenericIdApiDto
{ {

@ -0,0 +1,15 @@
using espacecollab.backend.appservices.dtos.Interfaces;
namespace espacecollab.backend.appservices.interfaces
{
public interface IGenericsServices<T> where T : class, IGenericIdApiDto
{
T? Add(T apiDto);
IEnumerable<T> GetAll();
T? GetById(int id);
T? Update(T apiDto);
}
}

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\espacecollab.backend.appservices.dtos\espacecollab.backend.appservices.dtos.csproj" />
<ProjectReference Include="..\espacecollab.backend.infrastructure.sql.dtos\espacecollab.backend.infrastructure.sql.dtos.csproj" />
</ItemGroup>
</Project>

@ -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; using espacecollab.backend.infrastructure.sql.dtos.Interfaces;
namespace espacecollab.backend.appservices namespace espacecollab.backend.appservices
{ {
public abstract class GenericsServices<T, TO> where T : class, IGenericIdSqlDto public abstract class GenericsServices<T, TO> : IGenericsServices<TO> where T : class, IGenericIdSqlDto
where TO : class, IGenericIdApiDto where TO : class, IGenericIdApiDto
{ {
Func<T, TO> MapperToApiDto { get; } private Func<T, TO> MapperToApiDto { get; }
Func<TO, T> MapperToSqlDto { get; } private Func<TO, T> MapperToSqlDto { get; }
private IGenericRepository<T> GenericRepository { get; } private IGenericRepository<T> GenericRepository { get; }

@ -1,15 +0,0 @@
using espacecollab.backend.infrastructure.sql.dtos.Interfaces;
namespace espacecollab.backend.appservices
{
public interface IGenericsServices<T, TO> where T : class, IGenericIdSqlDto
{
TO? Add(T entity);
IEnumerable<TO> GetAll();
TO? GetById(int id);
TO? Update(T entity);
}
}

@ -8,6 +8,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\espacecollab.backend.appservices.dtos\espacecollab.backend.appservices.dtos.csproj" /> <ProjectReference Include="..\espacecollab.backend.appservices.dtos\espacecollab.backend.appservices.dtos.csproj" />
<ProjectReference Include="..\espacecollab.backend.appservices.interfaces\espacecollab.backend.appservices.interfaces.csproj" />
<ProjectReference Include="..\espacecollab.backend.infrastructure.sql\espacecollab.backend.infrastructure.sql.csproj" /> <ProjectReference Include="..\espacecollab.backend.infrastructure.sql\espacecollab.backend.infrastructure.sql.csproj" />
</ItemGroup> </ItemGroup>

@ -19,9 +19,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2 ApplicationsServices", "2
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4 Infrastructure", "4 Infrastructure", "{E29F5CA9-ABAF-4437-8633-49FF27110E6D}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4 Infrastructure", "4 Infrastructure", "{E29F5CA9-ABAF-4437-8633-49FF27110E6D}"
EndProject 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 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 EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution 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}.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.ActiveCfg = Release|Any CPU
{48253B9B-9B42-48CF-A95F-358171BABA74}.Release|Any CPU.Build.0 = 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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -69,6 +75,7 @@ Global
{26C08CE0-E6E5-4E03-8AEA-233F93218A3B} = {E29F5CA9-ABAF-4437-8633-49FF27110E6D} {26C08CE0-E6E5-4E03-8AEA-233F93218A3B} = {E29F5CA9-ABAF-4437-8633-49FF27110E6D}
{3E9E4801-D686-4581-8051-E0E1B036AC70} = {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} {48253B9B-9B42-48CF-A95F-358171BABA74} = {E29F5CA9-ABAF-4437-8633-49FF27110E6D}
{7872657E-46E2-44A1-AFA6-0D3B9E45084A} = {CE5199B3-E423-46C1-B141-18C46473D964}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0A56A44C-135E-4CE4-834B-8DFDF69DC415} SolutionGuid = {0A56A44C-135E-4CE4-834B-8DFDF69DC415}

Loading…
Cancel
Save