diff --git a/API_SQLuedo/API/Controllers/UsersController.cs b/API_SQLuedo/API/Controllers/UsersController.cs index 623360e..1a5b42e 100644 --- a/API_SQLuedo/API/Controllers/UsersController.cs +++ b/API_SQLuedo/API/Controllers/UsersController.cs @@ -28,14 +28,14 @@ namespace API.Controllers [HttpGet("users/{page}/{number}")] public async Task GetUsers(int page, int number) { - var nbUser = (await _dataService.UserService.GetUsers(page, number)).ToList().Count(); + var nbUser = (await _dataService.UserService.GetItems(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(_dataService.UserService.GetItems(page, number)); + return Ok(_dataService.UserService.GetItems(page, number)); } [HttpGet("user/id/{id}")] @@ -44,8 +44,8 @@ namespace API.Controllers try { _logger.LogInformation("[INFORMATION] Utilisateur avec l'id {id} a été trouvé.", id); - return Ok(_dataService.UserService.GetItems(1, 1, UserProperty.Id.ToString(),id)); - } catch (ArgumentException) + return Ok(_dataService.UserService.GetItems(1, 1, UserProperty.Id.ToString(),id)); + } catch (KeyNotFoundException) { _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); return NotFound(); @@ -58,7 +58,7 @@ namespace API.Controllers try { _logger.LogInformation("[INFORMATION] Utilisateur avec l'username {username} a été trouvé.", username); - return Ok(_dataService.UserService.GetItems(1, 1,UserProperty.Username.ToString(), username)); + return Ok(_dataService.UserService.GetItems(1, 1,UserProperty.Username.ToString(), username)); }catch (ArgumentException) { _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'username {username}.", username); @@ -70,11 +70,11 @@ namespace API.Controllers [HttpDelete] public async Task DeleteUser(int id) { - var success = await _dataService.UserService.DeleteItem(id); + var success = await _dataService.UserService.DeleteItem(id); if(success) { _logger.LogInformation("[INFORMATION] L'utilisateur avec l'id {id} a été supprimé.", id); - return Ok(_dataService.UserService.DeleteItem(id)); + return Ok(_dataService.UserService.DeleteItem(id)); } else { _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); @@ -92,7 +92,7 @@ namespace API.Controllers } _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), _dataService.UserService.AddItem(dto.FromDTOToModel().FromModelToEntity())); + return Created(nameof(GetUsers), _dataService.UserService.AddItem(dto)); } [HttpPut] @@ -111,7 +111,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(_dataService.UserService.UpdateItem(id, userDTO)); + return Ok(_dataService.UserService.UpdateItem(id, userDTO)); } _logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); return NotFound(); diff --git a/API_SQLuedo/ModelToEntity/DbDataManager.cs b/API_SQLuedo/ModelToEntity/DbDataManager.cs index c4640e0..e14f522 100644 --- a/API_SQLuedo/ModelToEntity/DbDataManager.cs +++ b/API_SQLuedo/ModelToEntity/DbDataManager.cs @@ -12,7 +12,7 @@ using System.Runtime.InteropServices.ObjectiveC; namespace ModelToEntity { - public class DbDataManager : IUserDataService + public class DbDataManager : IUserDataService { public async Task GetUserById(int id) { @@ -161,37 +161,34 @@ namespace ModelToEntity throw new NotImplementedException(); } - public async Task AddItem(T? item) where T : class + public async Task AddItem(User? item) { using (var context = new UserDbContext()) { - return await context.CreateItemAsync(item); + return (await context.CreateItemAsync(item.FromModelToEntity())).FromEntityToModel() ; } - } - public async Task DeleteItem(int id) where T : class + public async Task DeleteItem(int id) { using(var context = new UserDbContext()) { - return await context.DeleteItemAsync(id); + return await context.DeleteItemAsync(id); } } - public async Task UpdateItem(int? id, TDto? newItem) - where T : class - where TDto : class + public async Task UpdateItem(int? id, TDto? newItem) where TDto : class { using(var context = new UserDbContext()) { - return await context.UpdateItemAsync(id, newItem); + return (await context.UpdateItemAsync(id, newItem)).FromEntityToModel(); } } - public async Task> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null) where T : class + public async Task> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null) { using (var context = new UserDbContext()) { - return await context.GetItemsWithFilter(index, count, orderingPropertyName, valueProperty); + return (await context.GetItemsWithFilter(index, count, orderingPropertyName, valueProperty)).Select(item => item.FromEntityToModel()); } } } diff --git a/API_SQLuedo/ModelToEntity/Extension.cs b/API_SQLuedo/ModelToEntity/Extension.cs index 02c8edd..12ea2d6 100644 --- a/API_SQLuedo/ModelToEntity/Extension.cs +++ b/API_SQLuedo/ModelToEntity/Extension.cs @@ -56,9 +56,11 @@ namespace ModelToEntity { throw new ArgumentException("Impossible de trouver l'entité", nameof(id)); } + var primaryKey = context.Model.FindEntityType(typeof(T)).FindPrimaryKey(); + var primaryKeyPropertyName = primaryKey.Properties.Select(x => x.Name).Single(); var propertiesToUpdate = typeof(TDto).GetProperties() - .Where(p => p.CanRead && p.CanWrite); + .Where(p => p.CanRead && p.CanWrite && p.Name != primaryKeyPropertyName); foreach (var property in propertiesToUpdate) { @@ -72,7 +74,7 @@ namespace ModelToEntity return Task.FromResult(entity); } internal static Task> GetItemsWithFilter(this DbContext context, - int index, int count, string? orderingPropertyName = null, object valueProperty = null) where T : class + int index, int count, string? orderingPropertyName = null, object? valueProperty = null) where T : class { IQueryable query = context.Set(); @@ -96,6 +98,7 @@ namespace ModelToEntity } } } + return Task.FromResult>(new List { default(T) }); } var items = query.Skip(index).Take(count).ToList(); return Task.FromResult>(items); diff --git a/API_SQLuedo/Services/UserDataService.cs b/API_SQLuedo/Services/UserDataService.cs index 82d6c0d..9a27067 100644 --- a/API_SQLuedo/Services/UserDataService.cs +++ b/API_SQLuedo/Services/UserDataService.cs @@ -56,28 +56,36 @@ namespace Services return newUserEntity.FromModelToDTO(); } - public async Task AddItem(T? item) where T : class + public async Task AddItem(UserDTO? item) { - var newItem = dataServiceEF.AddItem(item); - return await newItem; + var newItem = await dataServiceEF.AddItem(item.FromDTOToModel()); + return newItem.FromModelToDTO(); } - public Task DeleteItem(int id) where T : class + public Task DeleteItem(int id) { - var succes = dataServiceEF.DeleteItem(id); + var succes = dataServiceEF.DeleteItem(id); return succes; } - public Task UpdateItem(int? id, TDto? newItem) where T : class where TDto : class + public async Task UpdateItem(int? id, TDto? newItem) where TDto : class { - var item = dataServiceEF.UpdateItem(id, newItem); - return item; + var item = await dataServiceEF.UpdateItem(id, newItem); + return item.FromModelToDTO(); } - public Task> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null) where T : class + public async Task> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null) { - var items = dataServiceEF.GetItems(index, count, orderingPropertyName, valueProperty); - return items; + try + { + var items = await dataServiceEF.GetItems(index, count, orderingPropertyName, valueProperty); + return items.Select(item => item.FromModelToDTO()); + } + catch (KeyNotFoundException ex) + { + throw; + } + } public Task> GetParagraphs(int page, int number) diff --git a/API_SQLuedo/Shared/IGenericService.cs b/API_SQLuedo/Shared/IGenericService.cs index 4e84eaf..c047693 100644 --- a/API_SQLuedo/Shared/IGenericService.cs +++ b/API_SQLuedo/Shared/IGenericService.cs @@ -2,9 +2,9 @@ { public interface IGenericService where T : class { - public Task AddItem(T? item) where T : class; - public Task DeleteItem(int id) where T : class; - public Task UpdateItem(int? id, TDto? newItem) where T : class where TDto : class; - public Task> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null) where T : class; + public Task AddItem(T? item); + public Task DeleteItem(int id); + public Task UpdateItem(int? id, TDto? newItem) where TDto : class; + public Task> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null); } }