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}")]
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)
{
_logger.LogError("[ERREUR] Aucun utilisateur trouvé.");
return StatusCode(204);
}
_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}")]
@ -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<UserEntity>(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<UserEntity>(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<IActionResult> DeleteUser(int id)
{
var success = await _dataService.UserService.DeleteItem<UserEntity>(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<UserEntity>(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<UserEntity, UserDTO>(id, userDTO));
return Ok(_dataService.UserService.UpdateItem<UserDTO>(id, userDTO));
}
_logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id);
return NotFound();

@ -12,7 +12,7 @@ using System.Runtime.InteropServices.ObjectiveC;
namespace ModelToEntity
{
public class DbDataManager : IUserDataService<User>
public class DbDataManager : IUserDataService<User?>
{
public async Task<User> GetUserById(int id)
{
@ -161,37 +161,34 @@ namespace ModelToEntity
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())
{
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())
{
return await context.DeleteItemAsync<T>(id);
return await context.DeleteItemAsync<UserEntity>(id);
}
}
public async Task<T?> UpdateItem<T, TDto>(int? id, TDto? newItem)
where T : class
where TDto : class
public async Task<User?> UpdateItem<TDto>(int? id, TDto? newItem) where TDto : class
{
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())
{
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));
}
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<T?>(entity);
}
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>();
@ -96,6 +98,7 @@ namespace ModelToEntity
}
}
}
return Task.FromResult<IEnumerable<T?>>(new List<T?> { default(T) });
}
var items = query.Skip(index).Take(count).ToList();
return Task.FromResult<IEnumerable<T?>>(items);

@ -56,28 +56,36 @@ namespace Services
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);
return await newItem;
var newItem = await dataServiceEF.AddItem(item.FromDTOToModel());
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;
}
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);
return item;
var item = await dataServiceEF.UpdateItem<TDto>(id, newItem);
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);
return items;
try
{
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)

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

Loading…
Cancel
Save