using Microsoft.EntityFrameworkCore; using Sufi.Demo.PeopleDirectory.Application.Contracts.Repositories; using Sufi.Demo.PeopleDirectory.Domain.Common; using Sufi.Demo.PeopleDirectory.Persistence.Contexts; namespace Sufi.Demo.PeopleDirectory.Persistence.Repositories { public class AsyncRepository( ApplicationDbContext dbContext ) : IAsyncRepository where T : AuditableEntity { public IQueryable Entities => dbContext.Set(); public async Task AddAsync(T entity) { await dbContext.Set().AddAsync(entity); return entity; } public async Task CountAsync() => await dbContext.Set().CountAsync(); public Task DeleteAsync(T entity) { dbContext.Set().Remove(entity); return Task.CompletedTask; } public async Task DeleteByIdAsync(TId id) { var rowsAffected = await dbContext.Set() .Where(e => e.Id != null && e.Id.Equals(id)) .ExecuteDeleteAsync(); return rowsAffected; } public async Task> GetAllAsync() { return await dbContext .Set() .ToListAsync(); } public async Task GetByIdAsync(TId id) { return await dbContext.Set().FindAsync(id); } public async Task> GetPagedResponseAsync(int pageNumber, int pageSize) { return await dbContext .Set() .Skip((pageNumber - 1) * pageSize) .Take(pageSize) .AsNoTracking() .ToListAsync(); } public Task UpdateAsync(T entity) { T? exist = dbContext.Set().Find(entity.Id); if (exist != null) { dbContext.Entry(exist).CurrentValues.SetValues(entity); } return Task.CompletedTask; } } }