classlib/ExpenseTracker.Persistence/PostgreSQL/Repositories/BasePostgreSQLRepository.cs
2024-08-07 21:12:02 +03:00

56 lines
1.9 KiB
C#

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<TEntity, TKey> : IBaseRepository<TEntity, TKey>
where TKey : IEquatable<TKey>
where TEntity : EntityBase<TKey>
{
protected ApplicationDbContext _dbContext;
public BasePostgreSQLRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
public IQueryable<TEntity> Queryable => _dbContext.Set<TEntity>().AsQueryable();
public async Task<TEntity> AddOneAsync(TEntity entity, CancellationToken cancellationToken)
{
await _dbContext.Set<TEntity>().AddAsync(entity, cancellationToken);
await _dbContext.SaveChangesAsync();
return entity;
}
public async Task<IEnumerable<TEntity>> AddManyAsync(IEnumerable<TEntity> entities, CancellationToken cancellationToken)
{
await _dbContext.Set<TEntity>().AddRangeAsync(entities, cancellationToken);
await _dbContext.SaveChangesAsync();
return entities;
}
public async Task<TEntity> UpdateOneAsync(TEntity entity, CancellationToken cancellationToken)
{
_dbContext.Set<TEntity>().Update(entity);
await _dbContext.SaveChangesAsync();
return entity;
}
public async Task DeleteOneAsync(TKey id, CancellationToken cancellationToken)
{
// await _dbContext.Set<TEntity>().Where(e => e.Id.Equals(id)).ExecuteDeleteAsync();
var entity = _dbContext.Set<TEntity>().Find(id);
_dbContext.Set<TEntity>().Remove(entity);
await _dbContext.SaveChangesAsync();
}
public Task DeleteManyAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}