85 lines
2.6 KiB
C#
85 lines
2.6 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using UserManagement.Domain.Entities;
|
|
using UserManagement.Infrastructure.Interfaces;
|
|
|
|
namespace UserManagement.Infrastructure.Repositories
|
|
{
|
|
public class UserRepository : IUserRepository
|
|
{
|
|
// CTOR
|
|
private readonly ApplicationDbContext _context;
|
|
public UserRepository(ApplicationDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
// CREATE
|
|
public async Task<User?> AddAsync(User user)
|
|
{
|
|
await _context.Users.AddAsync(user);
|
|
await _context.SaveChangesAsync();
|
|
return user;
|
|
}
|
|
|
|
// READ ALL
|
|
public async Task<IEnumerable<User>> GetAllAsync(bool includeRoles = true)
|
|
{
|
|
var query = _context.Users.AsNoTracking();
|
|
|
|
if (includeRoles)
|
|
query = query.Include(user => user.UserRoles)!.ThenInclude(ur => ur.Role);
|
|
|
|
return await query.ToListAsync();
|
|
}
|
|
|
|
// READ BY ID
|
|
public async Task<User?> GetByIdAsync(int id, bool includeRoles = true)
|
|
{
|
|
var query = _context.Users.AsNoTracking();
|
|
|
|
if (includeRoles)
|
|
query = query.Include(user => user.UserRoles)!.ThenInclude(ur => ur.Role);
|
|
|
|
return await query.FirstOrDefaultAsync(u => u.Id == id);
|
|
}
|
|
|
|
// READ BY USERNAME
|
|
public async Task<User?> GetByUsernameAsync(string username, bool includeRoles = true)
|
|
{
|
|
var query = _context.Users.AsNoTracking();
|
|
|
|
if (includeRoles)
|
|
query = query.Include(user => user.UserRoles)!.ThenInclude(ur => ur.Role);
|
|
|
|
return await query.FirstOrDefaultAsync(u => u.UserName == username);
|
|
}
|
|
|
|
// READ BY ROLE
|
|
public async Task<IEnumerable<User>> GetByRoleAsync(string role)
|
|
{
|
|
var query = _context.Users
|
|
.Include(u => u.UserRoles)!
|
|
.ThenInclude(ur => ur.Role)
|
|
.Where(ur => ur.UserRoles!.Any(r => r.Role!.Name == role));
|
|
|
|
return await query.ToListAsync();
|
|
}
|
|
|
|
// UPDATE
|
|
public async Task<bool> UpdateAsync(User user)
|
|
{
|
|
_context.Entry(user).State = EntityState.Modified;
|
|
var results = await _context.SaveChangesAsync();
|
|
return results > 0;
|
|
}
|
|
|
|
// DELETE
|
|
public async Task<bool> DeleteAsync(User user)
|
|
{
|
|
_context.Users.Remove(user);
|
|
var result = await _context.SaveChangesAsync();
|
|
return result > 0;
|
|
}
|
|
}
|
|
}
|