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;
}
}
}