ajout début de la génicité mais il y a des erreurs, pas encore corigées !!!!

Genericite
Victor GABORIT 1 year ago
parent 5f9899276a
commit 08e08687da

@ -13,27 +13,27 @@ namespace API.Controllers
[ApiController] [ApiController]
public class UserController : Controller public class UserController : Controller
{ {
private IDataService _userDataService; private IDataService _dataService;
private readonly ILogger<UserController> _logger; private readonly ILogger<UserController> _logger;
public UserController(IDataService userDataService, ILogger<UserController> logger) public UserController(IDataService dataService, ILogger<UserController> logger)
{ {
_userDataService = userDataService; _dataService = dataService;
_logger = logger; _logger = logger;
} }
[HttpGet("users/{page}/{number}")] [HttpGet("users/{page}/{number}")]
public async Task<IActionResult> GetUsers(int page, int number) public async Task<IActionResult> GetUsers(int page, int number)
{ {
var nbUser = (await _userDataService.GetUsers(page, number)).ToList().Count(); var nbUser = (await _dataService.UserService.GetUsers(page, number)).ToList().Count();
if(nbUser == 0) if(nbUser == 0)
{ {
_logger.LogError("[ERREUR] Aucun utilisateur trouvé."); _logger.LogError("[ERREUR] Aucun utilisateur trouvé.");
return StatusCode(204); return StatusCode(204);
} }
_logger.LogInformation("[INFORMATION] {nb} Utilisateur(s) trouvé(s)", nbUser); _logger.LogInformation("[INFORMATION] {nb} Utilisateur(s) trouvé(s)", nbUser);
return Ok(_userDataService.GetUsers(page, number)); return Ok(_dataService.UserService.GetUsers(page, number));
} }
[HttpGet("user/id/{id}")] [HttpGet("user/id/{id}")]
@ -42,7 +42,7 @@ namespace API.Controllers
try try
{ {
_logger.LogInformation("[INFORMATION] Utilisateur avec l'id {id} a été trouvé.", id); _logger.LogInformation("[INFORMATION] Utilisateur avec l'id {id} a été trouvé.", id);
return Ok(_userDataService.GetUserById(id)); return Ok(_dataService.UserService.GetUserById(id));
} catch (ArgumentException) } catch (ArgumentException)
{ {
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id);
@ -56,7 +56,7 @@ namespace API.Controllers
try try
{ {
_logger.LogInformation("[INFORMATION] Utilisateur avec l'username {username} a été trouvé.", username); _logger.LogInformation("[INFORMATION] Utilisateur avec l'username {username} a été trouvé.", username);
return Ok(_userDataService.GetUserByUsername(username)); return Ok(_dataService.UserService.GetUserByUsername(username));
}catch (ArgumentException) }catch (ArgumentException)
{ {
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'username {username}.", username); _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'username {username}.", username);
@ -68,11 +68,11 @@ namespace API.Controllers
[HttpDelete] [HttpDelete]
public async Task<IActionResult> DeleteUser(int id) public async Task<IActionResult> DeleteUser(int id)
{ {
var success = await _userDataService.DeleteUser(id); var success = await _dataService.UserService.DeleteUser(id);
if(success) if(success)
{ {
_logger.LogInformation("[INFORMATION] L'utilisateur avec l'id {id} a été supprimé.", id); _logger.LogInformation("[INFORMATION] L'utilisateur avec l'id {id} a été supprimé.", id);
return Ok(_userDataService.DeleteUser(id)); return Ok(_dataService.UserService.DeleteUser(id));
} else } else
{ {
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id);
@ -88,9 +88,9 @@ namespace API.Controllers
{ {
return BadRequest(); return BadRequest();
} }
// return Ok(_userDataService.CreateUser(username, password, email, isAdmin));
_logger.LogInformation("[INFORMATION] Un utilisateur a été créé : username - {username}, password - {password}, email - {email}, isAdmin - {isAdmin}", dto.Username, dto.Password, dto.Email, dto.IsAdmin); _logger.LogInformation("[INFORMATION] Un utilisateur a été créé : username - {username}, password - {password}, email - {email}, isAdmin - {isAdmin}", dto.Username, dto.Password, dto.Email, dto.IsAdmin);
return Created(nameof(GetUsers), _userDataService.CreateUser(dto.Username, dto.Password, dto.Email, dto.IsAdmin)); return Created(nameof(GetUsers), _dataService.UserService.CreateUser(dto.Username, dto.Password, dto.Email, dto.IsAdmin));
} }
[HttpPut] [HttpPut]
@ -109,7 +109,7 @@ namespace API.Controllers
if(userDTO != null) if(userDTO != null)
{ {
_logger.LogInformation("[INFORMATION] La mise à jour de l'utilisateur avec l'id {id} a été effectuée", id); _logger.LogInformation("[INFORMATION] La mise à jour de l'utilisateur avec l'id {id} a été effectuée", id);
return Ok(_userDataService.UpdateUser(id, userDTO)); return Ok(_dataService.UserService.UpdateUser(id, userDTO));
} }
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id);
return NotFound(); return NotFound();

@ -15,7 +15,7 @@ builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();
builder.Services.AddScoped<IDataService, UserDataService>(); builder.Services.AddScoped<IUserDataService, UserDataService>();
builder.Services.AddScoped<IDataServiceEF, DbDataManager>(); builder.Services.AddScoped<IDataServiceEF, DbDataManager>();
builder.Services.AddDbContext<DbContext, UserDbContext>(); builder.Services.AddDbContext<DbContext, UserDbContext>();
builder.Services.AddDbContext<WebAPIDbContext>(options => options.UseInMemoryDatabase("appDb")); builder.Services.AddDbContext<WebAPIDbContext>(options => options.UseInMemoryDatabase("appDb"));

@ -9,7 +9,7 @@ using Model.Mappers;
namespace ModelToEntity namespace ModelToEntity
{ {
public class DbDataManager : IDataServiceEF public class DbDataManager : IUserDataService<User?>
{ {
public async Task<User> GetUserById(int id) public async Task<User> GetUserById(int id)
{ {
@ -93,7 +93,7 @@ namespace ModelToEntity
IsAdmin = isAdmin IsAdmin = isAdmin
}; };
context.Users.Add(newUserEntity.FromDTOToModel().FromModelToEntity()); context.Users.Add(newUserEntity.FromDTOToModel().FromModelToEntity());
context.SaveChangesAsync(); context.SaveChanges();
return await Task.FromResult(newUserEntity.FromDTOToModel()); return await Task.FromResult(newUserEntity.FromDTOToModel());
} }
@ -157,6 +157,11 @@ namespace ModelToEntity
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task<T?> AddItem<T>(T? item)
{
throw new NotImplementedException();
}
} }
} }

@ -7,10 +7,25 @@ using System.Threading.Tasks;
using Entities; using Entities;
using Entities.SQLudeoDB; using Entities.SQLudeoDB;
using Model.Business; using Model.Business;
using System.Diagnostics;
using DbContextLib;
using Microsoft.EntityFrameworkCore;
namespace ModelToEntity namespace ModelToEntity
{ {
static class Extension internal static class Extension
{ {
internal static async Task<T?> AddItemAsync<T>(this DbContext context, T? item) where T : class
{
if (item == null || await context.Set<T>().ContainsAsync(item))
{
return default(T);
}
context.Set<T>().Add(item);
await context.SaveChangesAsync();
return item;
}
} }
} }

@ -6,23 +6,8 @@ namespace Services
{ {
public interface IDataService public interface IDataService
{ {
public Task<IEnumerable<UserDTO>> GetUsers(int page, int number); IUserDataService UserService { get; }
public Task<UserDTO> GetUserById(int id); IInquiryDataService InquiryDataService { get; }
public Task<UserDTO> GetUserByUsername(string username); ILessonDataService LessonDataService { get; }
public Task<bool> DeleteUser(int id);
public Task<UserDTO> UpdateUser(int id, UserDTO user);
public Task<UserDTO> CreateUser(string username, string password, string email, bool isAdmin);
public IEnumerable<InquiryDTO> GetInquiries(int page, int number);
public InquiryDTO GetInquiryById(int id);
public InquiryDTO GetInquiryByTitle(string title);
public bool DeleteInquiry(int id);
public InquiryDTO UpdateInquiry(int id, InquiryDTO inquiry);
public UserDTO CreateInquiry(string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable);
public IEnumerable<InquiryDTO> GetLessons(int page, int number);
public InquiryDTO GetLessonById(int id);
public InquiryDTO GetLessonByTitle(string title);
public bool DeleteLesson(int id);
public InquiryDTO UpdateLesson(int id, LessonDTO lesson);
public UserDTO CreateLesson(string title, string lastPublisher, DateOnly lastEdit);
} }
} }

@ -0,0 +1,21 @@
using Entities.SQLudeoDB;
using Model.DTO;
using Shared;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Services
{
public interface IInquiryDataService : IGenericService<InquiryDTO>
{
public IEnumerable<InquiryDTO> GetInquiries(int page, int number);
public InquiryDTO GetInquiryById(int id);
public InquiryDTO GetInquiryByTitle(string title);
public bool DeleteInquiry(int id);
public InquiryDTO UpdateInquiry(int id, InquiryDTO inquiry);
public UserDTO CreateInquiry(string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable);
}
}

@ -0,0 +1,20 @@
using Model.DTO;
using Shared;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Services
{
public interface ILessonDataService : IGenericService<LessonDTO>
{
public IEnumerable<InquiryDTO> GetLessons(int page, int number);
public InquiryDTO GetLessonById(int id);
public InquiryDTO GetLessonByTitle(string title);
public bool DeleteLesson(int id);
public InquiryDTO UpdateLesson(int id, LessonDTO lesson);
public UserDTO CreateLesson(string title, string lastPublisher, DateOnly lastEdit);
}
}

@ -24,6 +24,7 @@
<ProjectReference Include="..\EntityFramework\Entities.csproj" /> <ProjectReference Include="..\EntityFramework\Entities.csproj" />
<ProjectReference Include="..\ModelToEntity\ModelToEntity.csproj" /> <ProjectReference Include="..\ModelToEntity\ModelToEntity.csproj" />
<ProjectReference Include="..\Model\Model.csproj" /> <ProjectReference Include="..\Model\Model.csproj" />
<ProjectReference Include="..\Shared\Shared.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -13,28 +13,27 @@ using ModelToEntity;
namespace Services namespace Services
{ {
public class UserDataService : IDataService public class UserDataService : IUserDataService<UserDTO?>
{ {
private UserDbContext DbContext { get; set; }
private readonly IDataServiceEF dataServiceEF; private readonly IDataServiceEF dataServiceEF;
public UserDataService(IDataServiceEF dataServiceEF) public UserDataService(IDataServiceEF dataServiceEF)
{ {
this.dataServiceEF = dataServiceEF; this.dataServiceEF = dataServiceEF;
} }
public async Task<UserDTO> GetUserById(int id) public async Task<UserDTO?> GetUserById(int id)
{ {
var user = await dataServiceEF.GetUserById(id); var user = await dataServiceEF.GetUserById(id);
return user.FromModelToDTO(); return user.FromModelToDTO();
} }
public async Task<UserDTO> GetUserByUsername(string username) public async Task<UserDTO?> GetUserByUsername(string username)
{ {
var user = await dataServiceEF.GetUserByUsername(username); var user = await dataServiceEF.GetUserByUsername(username);
return user.FromModelToDTO(); return user.FromModelToDTO();
} }
public async Task<IEnumerable<UserDTO>> GetUsers(int page, int number) public async Task<IEnumerable<UserDTO?>> GetUsers(int page, int number)
{ {
var users = await dataServiceEF.GetUsers(page, number); var users = await dataServiceEF.GetUsers(page, number);
return users.Select(u => u.FromModelToDTO()); return users.Select(u => u.FromModelToDTO());
@ -46,72 +45,18 @@ namespace Services
return respons; return respons;
} }
public async Task<UserDTO> UpdateUser(int id, UserDTO user) public async Task<UserDTO?> UpdateUser(int id, UserDTO user)
{ {
var updatingUser = await dataServiceEF.UpdateUser(id, user); var updatingUser = await dataServiceEF.UpdateUser(id, user);
return updatingUser.FromModelToDTO(); return updatingUser.FromModelToDTO();
} }
public async Task<UserDTO> CreateUser(string username, string password, string email, bool isAdmin) public async Task<UserDTO?> CreateUser(string username, string password, string email, bool isAdmin)
{ {
var newUserEntity = await dataServiceEF.CreateUser(username, password, email, isAdmin); var newUserEntity = await dataServiceEF.CreateUser(username, password, email, isAdmin);
return newUserEntity.FromModelToDTO(); return newUserEntity.FromModelToDTO();
} }
public IEnumerable<InquiryDTO> GetInquiries(int page, int number) public async Task<T?> AddItem<T>(T? item)
{
throw new NotImplementedException();
}
public InquiryDTO GetInquiryById(int id)
{
throw new NotImplementedException();
}
public InquiryDTO GetInquiryByTitle(string title)
{
throw new NotImplementedException();
}
public UserDTO CreateInquiry(string title, string description, bool isUser, InquiryTableEntity database, SolutionEntity inquiryTable)
{
throw new NotImplementedException();
}
public bool DeleteInquiry(int id)
{
throw new NotImplementedException();
}
public InquiryDTO UpdateInquiry(int id, InquiryDTO inquiry)
{
throw new NotImplementedException();
}
public IEnumerable<InquiryDTO> GetLessons(int page, int number)
{
throw new NotImplementedException();
}
public InquiryDTO GetLessonById(int id)
{
throw new NotImplementedException();
}
public InquiryDTO GetLessonByTitle(string title)
{
throw new NotImplementedException();
}
public bool DeleteLesson(int id)
{
throw new NotImplementedException();
}
public InquiryDTO UpdateLesson(int id, LessonDTO lesson)
{
throw new NotImplementedException();
}
public UserDTO CreateLesson(string title, string lastPublisher, DateOnly lastEdit)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }

@ -0,0 +1,7 @@
namespace Shared
{
public interface IGenericService<T>
{
public Task<T?> AddItem<T>(T? item);
}
}

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Services;
using Model.DTO;
using Shared;
namespace Services
{
public interface IUserDataService<T> : IGenericService<T?>
{
public Task<IEnumerable<T?>> GetUsers(int page, int number);
public Task<T?> GetUserById(int id);
public Task<T?> GetUserByUsername(string username);
public Task<bool> DeleteUser(int id);
public Task<T?> UpdateUser(int id, UserDTO user);
public Task<T?> CreateUser(string username, string password, string email, bool isAdmin);
}
}

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
Loading…
Cancel
Save