using LANCommander.Server.Data.Enums; using LANCommander.Server.Data.Models; using LANCommander.Server.Services.Models; using System.Linq.Expressions; namespace LANCommander.Server.Services.Abstractions { public interface IBaseDatabaseService where T : class, IBaseModel { IBaseDatabaseService Query(Func, IQueryable> modifier); IBaseDatabaseService Include(params Expression>[] expressions); IBaseDatabaseService SortBy(Expression> expression, SortDirection direction = SortDirection.Ascending); IBaseDatabaseService AsNoTracking(); IBaseDatabaseService AsSplitQuery(); Task> GetAsync(); Task GetAsync(Guid id); Task> GetAsync(Expression> predicate); Task FirstOrDefaultAsync(Expression> predicate); Task ExistsAsync(Guid id); Task ExistsAsync(Expression> predicate); Task AddAsync(T entity); Task> AddMissingAsync(Expression> predicate, T entity); Task UpdateAsync(T entity); Task DeleteAsync(T entity); // TODO: Add IBaseDatabaseService<>.DeleteRangeAsync //Task DeleteRangeAsync(IEnumerable entities); } }