using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Ombi.Helpers; using Ombi.Store.Context; using Ombi.Store.Entities.Requests; namespace Ombi.Store.Repository.Requests { public class TvRequestRepository : BaseRepository, ITvRequestRepository { public TvRequestRepository(IOmbiContext ctx) : base(ctx) { Db = ctx; } public IOmbiContext Db { get; } public async Task GetRequestAsync(int tvDbId) { return await Db.TvRequests.Where(x => x.TvDbId == tvDbId) .Include(x => x.ChildRequests) .ThenInclude(x => x.RequestedUser) .Include(x => x.ChildRequests) .ThenInclude(x => x.SeasonRequests) .ThenInclude(x => x.Episodes) .FirstOrDefaultAsync(); } public TvRequests GetRequest(int tvDbId) { return Db.TvRequests.Where(x => x.TvDbId == tvDbId) .Include(x => x.ChildRequests) .ThenInclude(x => x.RequestedUser) .Include(x => x.ChildRequests) .ThenInclude(x => x.SeasonRequests) .ThenInclude(x => x.Episodes) .FirstOrDefault(); } public IQueryable Get() { return Db.TvRequests .Include(x => x.ChildRequests) .ThenInclude(x => x.RequestedUser) .Include(x => x.ChildRequests) .ThenInclude(x => x.SeasonRequests) .ThenInclude(x => x.Episodes) .AsQueryable(); } public IQueryable Get(string userId) { return Db.TvRequests .Include(x => x.ChildRequests) .ThenInclude(x => x.RequestedUser) .Include(x => x.ChildRequests) .ThenInclude(x => x.SeasonRequests) .ThenInclude(x => x.Episodes) .Where(x => x.ChildRequests.Any(a => a.RequestedUserId == userId)) .AsQueryable(); } public IQueryable GetLite(string userId) { return Db.TvRequests .Include(x => x.ChildRequests) .ThenInclude(x => x.RequestedUser) .Where(x => x.ChildRequests.Any(a => a.RequestedUserId == userId)) .AsQueryable(); } public IQueryable GetLite() { return Db.TvRequests .Include(x => x.ChildRequests) .ThenInclude(x => x.RequestedUser) .AsQueryable(); } public IQueryable GetChild() { return Db.ChildRequests .Include(x => x.RequestedUser) .Include(x => x.ParentRequest) .Include(x => x.SeasonRequests) .ThenInclude(x => x.Episodes) .AsQueryable(); } public IQueryable GetChild(string userId) { return Db.ChildRequests .Where(x => x.RequestedUserId == userId) .Include(x => x.RequestedUser) .Include(x => x.ParentRequest) .Include(x => x.SeasonRequests) .ThenInclude(x => x.Episodes) .AsQueryable(); } public async Task Save() { await InternalSaveChanges(); } public async Task Add(TvRequests request) { await Db.TvRequests.AddAsync(request); await InternalSaveChanges(); return request; } public async Task AddChild(ChildRequests request) { await Db.ChildRequests.AddAsync(request); await InternalSaveChanges(); return request; } public async Task Delete(TvRequests request) { Db.TvRequests.Remove(request); await InternalSaveChanges(); } public async Task DeleteChild(ChildRequests request) { Db.ChildRequests.Remove(request); await InternalSaveChanges(); } public async Task DeleteChildRange(IEnumerable request) { Db.ChildRequests.RemoveRange(request); await InternalSaveChanges(); } public async Task Update(TvRequests request) { Db.Update(request); await InternalSaveChanges(); } public async Task UpdateChild(ChildRequests request) { Db.Update(request); await InternalSaveChanges(); } } }