using LANCommander.Server.Data; using LANCommander.Server.Data.Enums; using LANCommander.Server.Data.Models; using LANCommander.Server.Models; using LANCommander.Server.Services.Models; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using System.Linq.Expressions; namespace LANCommander.Server.Services { public interface IBaseDatabaseService : IDisposable where T : class, IBaseModel { IBaseDatabaseService Query(Func, IQueryable> modifier); IBaseDatabaseService Include(params Expression>[] expressions); IBaseDatabaseService SortBy(Expression> expression, SortDirection direction = SortDirection.Ascending); IBaseDatabaseService DisableTracking(); Task> PaginateAsync(Expression> expression, int pageNumber, int pageSize); Task> GetAsync(); Task> GetAsync(); Task GetAsync(Guid id); Task GetAsync(Guid id); Task> GetAsync(Expression> predicate); Task> GetAsync(Expression> predicate); Task FirstOrDefaultAsync(Expression> predicate); Task FirstOrDefaultAsync(Expression> predicate); Task FirstOrDefaultAsync(Expression> predicate, Expression> orderKeySelector); Task FirstOrDefaultAsync(Expression> predicate, Expression> orderKeySelector); Task ExistsAsync(Guid id); Task AddAsync(T entity); Task> AddMissingAsync(Expression> predicate, T entity); Task UpdateAsync(T entity); Task DeleteAsync(T entity); } }