using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Runtime.CompilerServices; using System.Security.Cryptography.X509Certificates; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using UserService.DatabaseLayer.DataModels; namespace UserService.DatabaseLayer.Repository { public class BaseRepository where T : Node { private readonly Func> _context; protected BaseRepository(Func> context) { _context = context; } public async Task> GetAllAsync(CancellationToken token = default) { await using var db = new UserServiceDbContext(); return await _context(db).Include(x => x.Parent).ToListAsync(token); } public async Task GetAsync(Expression> predicate, CancellationToken token = default) { await using var db = new UserServiceDbContext(); return await _context(db).FirstOrDefaultAsync(predicate, token); } public async Task AddAsync(T entity, CancellationToken token = default) { await using var db = new UserServiceDbContext(); await _context(db).AddAsync(@entity, token); await db.SaveChangesAsync(token); } public async Task UpdateAsync(T entity, CancellationToken token = default) { await using var db = new UserServiceDbContext(); _context(db).Update(entity); await db.SaveChangesAsync(token); } public async Task DeleteAsync(T entity, CancellationToken token = default) { await using var db = new UserServiceDbContext(); _context(db).Remove(entity); await db.SaveChangesAsync(token); } } }