ajout d'une nouvelle branch pour corriger un problème de dépendance forte entre la partie WebService et EF ainsi que l'exclusion de la primary key dans la methode UpdateItem

correctionLienWebServiceEF
Victor GABORIT 1 year ago
parent 9073f29527
commit fc2db0d322

@ -28,14 +28,14 @@ namespace API.Controllers
[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 _dataService.UserService.GetUsers(page, number)).ToList().Count(); var nbUser = (await _dataService.UserService.GetItems(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(_dataService.UserService.GetItems<UserEntity>(page, number)); return Ok(_dataService.UserService.GetItems(page, number));
} }
[HttpGet("user/id/{id}")] [HttpGet("user/id/{id}")]
@ -44,8 +44,8 @@ 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(_dataService.UserService.GetItems<UserEntity>(1, 1, UserProperty.Id.ToString(),id)); return Ok(_dataService.UserService.GetItems(1, 1, UserProperty.Id.ToString(),id));
} catch (ArgumentException) } catch (KeyNotFoundException)
{ {
_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();
@ -58,7 +58,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(_dataService.UserService.GetItems<UserEntity>(1, 1,UserProperty.Username.ToString(), username)); return Ok(_dataService.UserService.GetItems(1, 1,UserProperty.Username.ToString(), 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);
@ -70,11 +70,11 @@ namespace API.Controllers
[HttpDelete] [HttpDelete]
public async Task<IActionResult> DeleteUser(int id) public async Task<IActionResult> DeleteUser(int id)
{ {
var success = await _dataService.UserService.DeleteItem<UserEntity>(id); var success = await _dataService.UserService.DeleteItem(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(_dataService.UserService.DeleteItem<UserEntity>(id)); return Ok(_dataService.UserService.DeleteItem(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);
@ -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); _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] [HttpPut]
@ -111,7 +111,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(_dataService.UserService.UpdateItem<UserEntity, UserDTO>(id, userDTO)); return Ok(_dataService.UserService.UpdateItem<UserDTO>(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();

@ -12,7 +12,7 @@ using System.Runtime.InteropServices.ObjectiveC;
namespace ModelToEntity namespace ModelToEntity
{ {
public class DbDataManager : IUserDataService<User> public class DbDataManager : IUserDataService<User?>
{ {
public async Task<User> GetUserById(int id) public async Task<User> GetUserById(int id)
{ {
@ -161,37 +161,34 @@ namespace ModelToEntity
throw new NotImplementedException(); throw new NotImplementedException();
} }
public async Task<T?> AddItem<T>(T? item) where T : class public async Task<User?> AddItem(User? item)
{ {
using (var context = new UserDbContext()) using (var context = new UserDbContext())
{ {
return await context.CreateItemAsync(item); return (await context.CreateItemAsync(item.FromModelToEntity())).FromEntityToModel() ;
} }
} }
public async Task<bool> DeleteItem<T>(int id) where T : class public async Task<bool> DeleteItem(int id)
{ {
using(var context = new UserDbContext()) using(var context = new UserDbContext())
{ {
return await context.DeleteItemAsync<T>(id); return await context.DeleteItemAsync<UserEntity>(id);
} }
} }
public async Task<T?> UpdateItem<T, TDto>(int? id, TDto? newItem) public async Task<User?> UpdateItem<TDto>(int? id, TDto? newItem) where TDto : class
where T : class
where TDto : class
{ {
using(var context = new UserDbContext()) using(var context = new UserDbContext())
{ {
return await context.UpdateItemAsync<T, TDto>(id, newItem); return (await context.UpdateItemAsync<UserEntity, TDto>(id, newItem)).FromEntityToModel();
} }
} }
public async Task<IEnumerable<T?>> GetItems<T>(int index, int count, string? orderingPropertyName = null, object? valueProperty = null) where T : class public async Task<IEnumerable<User?>> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null)
{ {
using (var context = new UserDbContext()) using (var context = new UserDbContext())
{ {
return await context.GetItemsWithFilter<T>(index, count, orderingPropertyName, valueProperty); return (await context.GetItemsWithFilter<UserEntity>(index, count, orderingPropertyName, valueProperty)).Select(item => item.FromEntityToModel());
} }
} }
} }

@ -56,9 +56,11 @@ namespace ModelToEntity
{ {
throw new ArgumentException("Impossible de trouver l'entité", nameof(id)); 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() 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) foreach (var property in propertiesToUpdate)
{ {
@ -72,7 +74,7 @@ namespace ModelToEntity
return Task.FromResult<T?>(entity); return Task.FromResult<T?>(entity);
} }
internal static Task<IEnumerable<T?>> GetItemsWithFilter<T>(this DbContext context, internal static Task<IEnumerable<T?>> GetItemsWithFilter<T>(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<T> query = context.Set<T>(); IQueryable<T> query = context.Set<T>();
@ -96,6 +98,7 @@ namespace ModelToEntity
} }
} }
} }
return Task.FromResult<IEnumerable<T?>>(new List<T?> { default(T) });
} }
var items = query.Skip(index).Take(count).ToList(); var items = query.Skip(index).Take(count).ToList();
return Task.FromResult<IEnumerable<T?>>(items); return Task.FromResult<IEnumerable<T?>>(items);

@ -56,28 +56,36 @@ namespace Services
return newUserEntity.FromModelToDTO(); return newUserEntity.FromModelToDTO();
} }
public async Task<T?> AddItem<T>(T? item) where T : class public async Task<UserDTO?> AddItem(UserDTO? item)
{ {
var newItem = dataServiceEF.AddItem(item); var newItem = await dataServiceEF.AddItem(item.FromDTOToModel());
return await newItem; return newItem.FromModelToDTO();
} }
public Task<bool> DeleteItem<T>(int id) where T : class public Task<bool> DeleteItem(int id)
{ {
var succes = dataServiceEF.DeleteItem<T>(id); var succes = dataServiceEF.DeleteItem(id);
return succes; return succes;
} }
public Task<T> UpdateItem<T, TDto>(int? id, TDto? newItem) where T : class where TDto : class public async Task<UserDTO> UpdateItem<TDto>(int? id, TDto? newItem) where TDto : class
{ {
var item = dataServiceEF.UpdateItem<T, TDto>(id, newItem); var item = await dataServiceEF.UpdateItem<TDto>(id, newItem);
return item; return item.FromModelToDTO();
} }
public Task<IEnumerable<T?>> GetItems<T>(int index, int count, string? orderingPropertyName = null, object? valueProperty = null) where T : class public async Task<IEnumerable<UserDTO?>> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null)
{ {
var items = dataServiceEF.GetItems<T>(index, count, orderingPropertyName, valueProperty); try
return items; {
var items = await dataServiceEF.GetItems(index, count, orderingPropertyName, valueProperty);
return items.Select(item => item.FromModelToDTO());
}
catch (KeyNotFoundException ex)
{
throw;
}
} }
public Task<IEnumerable<ParagraphDTO>> GetParagraphs(int page, int number) public Task<IEnumerable<ParagraphDTO>> GetParagraphs(int page, int number)

@ -2,9 +2,9 @@
{ {
public interface IGenericService<T> where T : class public interface IGenericService<T> where T : class
{ {
public Task<T?> AddItem<T>(T? item) where T : class; public Task<T?> AddItem(T? item);
public Task<bool> DeleteItem<T>(int id) where T : class; public Task<bool> DeleteItem(int id);
public Task<T> UpdateItem<T, TDto>(int? id, TDto? newItem) where T : class where TDto : class; public Task<T> UpdateItem<TDto>(int? id, TDto? newItem) where TDto : class;
public Task<IEnumerable<T>> GetItems<T>(int index, int count, string? orderingPropertyName = null, object? valueProperty = null) where T : class; public Task<IEnumerable<T>> GetItems(int index, int count, string? orderingPropertyName = null, object? valueProperty = null);
} }
} }

Loading…
Cancel
Save