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 #28

Merged
victor.gaborit merged 1 commits from correctionLienWebServiceEF into crud/security 1 year ago

@ -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