using Microsoft.EntityFrameworkCore; using PowderCoating.Core.Entities; using PowderCoating.Core.Interfaces.Repositories; using PowderCoating.Infrastructure.Data; namespace PowderCoating.Infrastructure.Repositories; /// /// Typed repository for that adds ThenInclude-based load methods the /// generic cannot express. /// public class JobItemCoatRepository : Repository, IJobItemCoatRepository { public JobItemCoatRepository(ApplicationDbContext context) : base(context) { } /// public async Task LoadForOrderMarkingAsync(int id) { return await _context.JobItemCoats .Include(c => c.JobItem).ThenInclude(i => i.Job).ThenInclude(j => j.Customer) .Include(c => c.Vendor) .Include(c => c.InventoryItem).ThenInclude(i => i!.PrimaryVendor) .FirstOrDefaultAsync(c => c.Id == id); } /// public async Task LoadWithInventoryAsync(int id) { return await _context.JobItemCoats .Include(c => c.InventoryItem) .FirstOrDefaultAsync(c => c.Id == id); } /// public async Task LoadWithJobChainAsync(int id) { return await _context.JobItemCoats .Include(c => c.JobItem).ThenInclude(i => i.Job) .FirstOrDefaultAsync(c => c.Id == id); } /// public async Task> GetCandidateCoatsForLinkingAsync(int excludeCoatId, int companyId) { return await _context.JobItemCoats .Include(c => c.JobItem) .Where(c => c.Id != excludeCoatId && c.InventoryItemId == null && c.JobItem.CompanyId == companyId) .ToListAsync(); } }