You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.3 KiB
119 lines
3.3 KiB
using DbContextLib;
|
|
using Entities;
|
|
using Model.OrderCriteria;
|
|
using Shared;
|
|
|
|
namespace DbDataManager.Service;
|
|
|
|
public class UserDataService : IUserService<UserEntity>
|
|
{
|
|
private UserDbContext DbContext { get; set; }
|
|
|
|
public UserDataService(UserDbContext context)
|
|
{
|
|
DbContext = context;
|
|
context.Database.EnsureCreated();
|
|
}
|
|
|
|
public UserEntity GetUserById(int id)
|
|
{
|
|
var userEntity = DbContext.Users.FirstOrDefault(u => u.Id == id);
|
|
if (userEntity == null)
|
|
{
|
|
throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(id));
|
|
}
|
|
|
|
return userEntity;
|
|
}
|
|
|
|
public UserEntity GetUserByUsername(string username)
|
|
{
|
|
var userEntity = DbContext.Users.FirstOrDefault(u => u.Username == username);
|
|
if (userEntity == null)
|
|
{
|
|
throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(username));
|
|
}
|
|
|
|
return userEntity;
|
|
}
|
|
|
|
public IEnumerable<UserEntity> GetUsers(int page, int number, UserOrderCriteria orderCriteria)
|
|
{
|
|
if (page <= 0)
|
|
{
|
|
page = 1;
|
|
}
|
|
if (number <= 0)
|
|
{
|
|
number = 10;
|
|
}
|
|
IQueryable<UserEntity> query = DbContext.Users.Skip((page - 1) * number).Take(number);
|
|
switch (orderCriteria)
|
|
{
|
|
case UserOrderCriteria.None:
|
|
break;
|
|
case UserOrderCriteria.ById:
|
|
query = query.OrderBy(s => s.Id);
|
|
break;
|
|
case UserOrderCriteria.ByUsername:
|
|
query = query.OrderBy(s => s.Username);
|
|
break;
|
|
case UserOrderCriteria.ByEmail:
|
|
query = query.OrderBy(s => s.Email);
|
|
break;
|
|
case UserOrderCriteria.ByIsAdmin:
|
|
query = query.OrderBy(s => s.IsAdmin);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
var users = query.ToList();
|
|
return users;
|
|
}
|
|
|
|
public bool DeleteUser(int id)
|
|
{
|
|
var userEntity = DbContext.Users.FirstOrDefault(u => u.Id == id);
|
|
if (userEntity == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
DbContext.Users.Remove(userEntity);
|
|
DbContext.SaveChangesAsync();
|
|
return true;
|
|
}
|
|
|
|
public UserEntity UpdateUser(int id, UserEntity user)
|
|
{
|
|
var updatingUser = DbContext.Users.FirstOrDefault(u => u.Id == id);
|
|
if (updatingUser == null)
|
|
{
|
|
throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(id));
|
|
}
|
|
|
|
foreach (var pptt in typeof(UserEntity).GetProperties()
|
|
.Where(p => p.CanWrite && p.Name != nameof(UserEntity.Id)))
|
|
{
|
|
pptt.SetValue(updatingUser, pptt.GetValue(user));
|
|
}
|
|
|
|
DbContext.SaveChangesAsync();
|
|
return updatingUser;
|
|
}
|
|
|
|
public UserEntity CreateUser(string username, string password, string email, bool isAdmin)
|
|
{
|
|
var newUserEntity = new UserEntity
|
|
{
|
|
Username = username,
|
|
Password = password,
|
|
Email = email,
|
|
IsAdmin = isAdmin
|
|
};
|
|
DbContext.Users.Add(newUserEntity);
|
|
DbContext.SaveChangesAsync();
|
|
return newUserEntity;
|
|
}
|
|
} |