using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; using ExpenseTracker.Application.Common.Interfaces.Repositories; using ExpenseTracker.Domain.Entities; namespace ExpenseTracker.Persistence.PostgreSQL.Repositories; public class BasePostgreSQLRepository : IBaseRepository where TKey : IEquatable where TEntity : EntityBase { protected ApplicationDbContext _dbContext; public BasePostgreSQLRepository(ApplicationDbContext dbContext) { _dbContext = dbContext; } public IQueryable Queryable => _dbContext.Set().AsQueryable(); public async Task AddOneAsync(TEntity entity, CancellationToken cancellationToken) { await _dbContext.Set().AddAsync(entity, cancellationToken); await _dbContext.SaveChangesAsync(); return entity; } public async Task> AddManyAsync(IEnumerable entities, CancellationToken cancellationToken) { await _dbContext.Set().AddRangeAsync(entities, cancellationToken); await _dbContext.SaveChangesAsync(); return entities; } public async Task UpdateOneAsync(TEntity entity, CancellationToken cancellationToken) { _dbContext.Set().Update(entity); await _dbContext.SaveChangesAsync(); return entity; } public async Task DeleteOneAsync(TKey id, CancellationToken cancellationToken) { // await _dbContext.Set().Where(e => e.Id.Equals(id)).ExecuteDeleteAsync(); var entity = _dbContext.Set().Find(id); _dbContext.Set().Remove(entity); await _dbContext.SaveChangesAsync(); } public Task DeleteManyAsync(Expression> predicate, CancellationToken cancellationToken) { throw new NotImplementedException(); } }