From 08e08687da43fcc8a69637a0b37a5575b69603ed Mon Sep 17 00:00:00 2001 From: "victor.gaborit" Date: Fri, 23 Feb 2024 09:54:16 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20d=C3=A9but=20de=20la=20g=C3=A9nicit?= =?UTF-8?q?=C3=A9=20mais=20il=20y=20a=20des=20erreurs,=20pas=20encore=20co?= =?UTF-8?q?rig=C3=A9es=20!!!!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API_SQLuedo/API/Controllers/UserController.cs | 24 +++--- API_SQLuedo/API/Program.cs | 2 +- API_SQLuedo/ModelToEntity/DbDataManager.cs | 9 ++- API_SQLuedo/ModelToEntity/Extension.cs | 19 ++++- API_SQLuedo/Services/IDataService.cs | 21 +----- API_SQLuedo/Services/IInquiryDataService.cs | 21 ++++++ API_SQLuedo/Services/ILessonDataService.cs | 20 +++++ API_SQLuedo/Services/Services.csproj | 1 + API_SQLuedo/Services/UserDataService.cs | 73 +++---------------- API_SQLuedo/Shared/IGenericService.cs | 7 ++ API_SQLuedo/Shared/IUserDataService.cs | 22 ++++++ API_SQLuedo/Shared/Shared.csproj | 9 +++ 12 files changed, 129 insertions(+), 99 deletions(-) create mode 100644 API_SQLuedo/Services/IInquiryDataService.cs create mode 100644 API_SQLuedo/Services/ILessonDataService.cs create mode 100644 API_SQLuedo/Shared/IGenericService.cs create mode 100644 API_SQLuedo/Shared/IUserDataService.cs create mode 100644 API_SQLuedo/Shared/Shared.csproj diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index 450c64a..3e17320 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -13,27 +13,27 @@ namespace API.Controllers [ApiController] public class UserController : Controller { - private IDataService _userDataService; + private IDataService _dataService; private readonly ILogger _logger; - public UserController(IDataService userDataService, ILogger logger) + public UserController(IDataService dataService, ILogger logger) { - _userDataService = userDataService; + _dataService = dataService; _logger = logger; } [HttpGet("users/{page}/{number}")] public async Task 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) { _logger.LogError("[ERREUR] Aucun utilisateur trouvé."); return StatusCode(204); } _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}")] @@ -42,7 +42,7 @@ namespace API.Controllers try { _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) { _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); @@ -56,7 +56,7 @@ namespace API.Controllers try { _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) { _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'username {username}.", username); @@ -68,11 +68,11 @@ namespace API.Controllers [HttpDelete] public async Task DeleteUser(int id) { - var success = await _userDataService.DeleteUser(id); + var success = await _dataService.UserService.DeleteUser(id); if(success) { _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 { _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); @@ -88,9 +88,9 @@ namespace API.Controllers { 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); - 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] @@ -109,7 +109,7 @@ namespace API.Controllers if(userDTO != null) { _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); return NotFound(); diff --git a/API_SQLuedo/API/Program.cs b/API_SQLuedo/API/Program.cs index eb3ee3c..579f60f 100644 --- a/API_SQLuedo/API/Program.cs +++ b/API_SQLuedo/API/Program.cs @@ -15,7 +15,7 @@ builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); -builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddDbContext(); builder.Services.AddDbContext(options => options.UseInMemoryDatabase("appDb")); diff --git a/API_SQLuedo/ModelToEntity/DbDataManager.cs b/API_SQLuedo/ModelToEntity/DbDataManager.cs index 7ae486b..9e87320 100644 --- a/API_SQLuedo/ModelToEntity/DbDataManager.cs +++ b/API_SQLuedo/ModelToEntity/DbDataManager.cs @@ -9,7 +9,7 @@ using Model.Mappers; namespace ModelToEntity { - public class DbDataManager : IDataServiceEF + public class DbDataManager : IUserDataService { public async Task GetUserById(int id) { @@ -93,7 +93,7 @@ namespace ModelToEntity IsAdmin = isAdmin }; context.Users.Add(newUserEntity.FromDTOToModel().FromModelToEntity()); - context.SaveChangesAsync(); + context.SaveChanges(); return await Task.FromResult(newUserEntity.FromDTOToModel()); } @@ -157,6 +157,11 @@ namespace ModelToEntity { throw new NotImplementedException(); } + + public Task AddItem(T? item) + { + throw new NotImplementedException(); + } } } diff --git a/API_SQLuedo/ModelToEntity/Extension.cs b/API_SQLuedo/ModelToEntity/Extension.cs index b039fe4..b63e770 100644 --- a/API_SQLuedo/ModelToEntity/Extension.cs +++ b/API_SQLuedo/ModelToEntity/Extension.cs @@ -7,10 +7,25 @@ using System.Threading.Tasks; using Entities; using Entities.SQLudeoDB; using Model.Business; +using System.Diagnostics; +using DbContextLib; +using Microsoft.EntityFrameworkCore; namespace ModelToEntity { - static class Extension + internal static class Extension { + internal static async Task AddItemAsync(this DbContext context, T? item) where T : class + { + if (item == null || await context.Set().ContainsAsync(item)) + { + return default(T); + } + + context.Set().Add(item); + await context.SaveChangesAsync(); + + return item; + } } -} +} \ No newline at end of file diff --git a/API_SQLuedo/Services/IDataService.cs b/API_SQLuedo/Services/IDataService.cs index c296774..462d8d5 100644 --- a/API_SQLuedo/Services/IDataService.cs +++ b/API_SQLuedo/Services/IDataService.cs @@ -6,23 +6,8 @@ namespace Services { public interface IDataService { - public Task> GetUsers(int page, int number); - public Task GetUserById(int id); - public Task GetUserByUsername(string username); - public Task DeleteUser(int id); - public Task UpdateUser(int id, UserDTO user); - public Task CreateUser(string username, string password, string email, bool isAdmin); - public IEnumerable 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 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); + IUserDataService UserService { get; } + IInquiryDataService InquiryDataService { get; } + ILessonDataService LessonDataService { get; } } } diff --git a/API_SQLuedo/Services/IInquiryDataService.cs b/API_SQLuedo/Services/IInquiryDataService.cs new file mode 100644 index 0000000..0e71be5 --- /dev/null +++ b/API_SQLuedo/Services/IInquiryDataService.cs @@ -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 + { + public IEnumerable 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); + } +} diff --git a/API_SQLuedo/Services/ILessonDataService.cs b/API_SQLuedo/Services/ILessonDataService.cs new file mode 100644 index 0000000..7321547 --- /dev/null +++ b/API_SQLuedo/Services/ILessonDataService.cs @@ -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 + { + public IEnumerable 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); + } +} diff --git a/API_SQLuedo/Services/Services.csproj b/API_SQLuedo/Services/Services.csproj index dd690cb..4f252a2 100644 --- a/API_SQLuedo/Services/Services.csproj +++ b/API_SQLuedo/Services/Services.csproj @@ -24,6 +24,7 @@ + diff --git a/API_SQLuedo/Services/UserDataService.cs b/API_SQLuedo/Services/UserDataService.cs index 4bffa90..141b251 100644 --- a/API_SQLuedo/Services/UserDataService.cs +++ b/API_SQLuedo/Services/UserDataService.cs @@ -13,28 +13,27 @@ using ModelToEntity; namespace Services { - public class UserDataService : IDataService + public class UserDataService : IUserDataService { - private UserDbContext DbContext { get; set; } private readonly IDataServiceEF dataServiceEF; public UserDataService(IDataServiceEF dataServiceEF) { this.dataServiceEF = dataServiceEF; } - public async Task GetUserById(int id) - { - var user = await dataServiceEF.GetUserById(id); + public async Task GetUserById(int id) + { + var user = await dataServiceEF.GetUserById(id); return user.FromModelToDTO(); } - public async Task GetUserByUsername(string username) + public async Task GetUserByUsername(string username) { var user = await dataServiceEF.GetUserByUsername(username); return user.FromModelToDTO(); } - public async Task> GetUsers(int page, int number) + public async Task> GetUsers(int page, int number) { var users = await dataServiceEF.GetUsers(page, number); return users.Select(u => u.FromModelToDTO()); @@ -46,72 +45,18 @@ namespace Services return respons; } - public async Task UpdateUser(int id, UserDTO user) + public async Task UpdateUser(int id, UserDTO user) { var updatingUser = await dataServiceEF.UpdateUser(id, user); return updatingUser.FromModelToDTO(); } - public async Task CreateUser(string username, string password, string email, bool isAdmin) + public async Task CreateUser(string username, string password, string email, bool isAdmin) { var newUserEntity = await dataServiceEF.CreateUser(username, password, email, isAdmin); return newUserEntity.FromModelToDTO(); - } - - public IEnumerable GetInquiries(int page, int number) - { - 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 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) + public async Task AddItem(T? item) { throw new NotImplementedException(); } diff --git a/API_SQLuedo/Shared/IGenericService.cs b/API_SQLuedo/Shared/IGenericService.cs new file mode 100644 index 0000000..f34b3f1 --- /dev/null +++ b/API_SQLuedo/Shared/IGenericService.cs @@ -0,0 +1,7 @@ +namespace Shared +{ + public interface IGenericService + { + public Task AddItem(T? item); + } +} diff --git a/API_SQLuedo/Shared/IUserDataService.cs b/API_SQLuedo/Shared/IUserDataService.cs new file mode 100644 index 0000000..fc5bca7 --- /dev/null +++ b/API_SQLuedo/Shared/IUserDataService.cs @@ -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 : IGenericService + { + public Task> GetUsers(int page, int number); + public Task GetUserById(int id); + public Task GetUserByUsername(string username); + public Task DeleteUser(int id); + public Task UpdateUser(int id, UserDTO user); + public Task CreateUser(string username, string password, string email, bool isAdmin); + + } +} diff --git a/API_SQLuedo/Shared/Shared.csproj b/API_SQLuedo/Shared/Shared.csproj new file mode 100644 index 0000000..fa71b7a --- /dev/null +++ b/API_SQLuedo/Shared/Shared.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + +