using System; using System.Threading.Tasks; using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; using LCU.API.Internal.DocumentIngestorLib.Persistence; using LCU.Library.Internal.DocumentIngestorModels.Entities; using LCU.Library.Internal.DocumentIngestorModels.Enums; using LCU.Library.Internal.DocumentIngestorModels.Models.Pagination; using LCU.Api.Internal.DocumentIngestorLib.Extensions.Queryables; namespace LCU.API.Internal.DocumentIngestorLib.Repositories { public class DocumentProcessingInfoRepository : BaseRepository, IDocumentProcessingInfoRepository { public DocumentProcessingInfoRepository(AppDbContext context) : base(context) { } public async Task> FindAsync() { return await _context.DocumentProcessingInfos.ToListAsync(); } public async Task FindByIdAsync(int id) { return await _context.DocumentProcessingInfos .FirstOrDefaultAsync(documentProcessingInfo => documentProcessingInfo.DocumentProcessingInfoId == id); } public async Task> FindListByIdAsync(List ids) { return await _context.DocumentProcessingInfos .Where(documentProcessingInfo => ids.Contains(documentProcessingInfo.DocumentProcessingInfoId)) .ToListAsync(); } public async Task> FindByIngestorRunInfoIdAsync(Guid ingestorRunInfoId) { return await _context.DocumentProcessingInfos .Where(documentProcessingInfo => documentProcessingInfo.IngestorRunInfoId == ingestorRunInfoId) .ToListAsync(); } public async Task> FindByProcessStatusTypeAsync(ProcessStatusTypes statusType, bool? isUnknown) { return await _context.DocumentProcessingInfos .Where(documentProcessingInfo => documentProcessingInfo.StatusType.Equals(statusType) && (isUnknown == null || documentProcessingInfo.EntityUnknown.Equals(isUnknown))) .ToListAsync(); } public async Task> FindByProcessStatusTypeListAsync(List statusTypes, bool? isUnknown) { return await _context.DocumentProcessingInfos .Where(documentProcessingInfo => statusTypes.Contains(documentProcessingInfo.StatusType) && (isUnknown == null || documentProcessingInfo.EntityUnknown == isUnknown)) .ToListAsync(); } public async Task> FindCompletedFirstPassByIngestorRunInfoIdAsync(Guid ingestorRunInfoId) { return await _context.DocumentProcessingInfos.Where(documentProcessingInfo => documentProcessingInfo.IngestorRunInfoId.Equals(ingestorRunInfoId) && documentProcessingInfo.ProcessCount >= 1 ).ToListAsync(); } public async Task AddAsync(DocumentProcessingInfo documentProcessingInfo) { var result = await _context.DocumentProcessingInfos.AddAsync(documentProcessingInfo); return result.Entity; } public async Task AddRangeAsync(DocumentProcessingInfo[] documentProcessingInfos) { await _context.DocumentProcessingInfos.AddRangeAsync(documentProcessingInfos); } public void Update(DocumentProcessingInfo documentProcessingInfo) { _context.DocumentProcessingInfos.Update(documentProcessingInfo); } public void UpdateRange(List documentProcessingInfos) { _context.DocumentProcessingInfos.UpdateRange(documentProcessingInfos); } public void Remove(DocumentProcessingInfo documentProcessingInfo) { _context.DocumentProcessingInfos.Remove(documentProcessingInfo); } public async Task> FilteredListAsync(Filter filter) { var results = new PagedResult(); var skip = (filter.Page - 1) * filter.Limit; results.Total = await _context.DocumentProcessingInfos .IncludeAll() .IncludeFilters(filter) .CountAsync(); results.Items = await _context.DocumentProcessingInfos .IncludeAll() .IncludeFilters(filter) .OrderBySortableFields(filter) .Skip(skip) .Take(filter.Limit) .ToArrayAsync(); return results; } public async Task CountCompletedFirstPassByIngestorRunInfoIdAsync(Guid ingestorRunInfoId) { return await _context.DocumentProcessingInfos.CountAsync(documentProcessingInfo => documentProcessingInfo.IngestorRunInfoId.Equals(ingestorRunInfoId) && documentProcessingInfo.ProcessCount >= 1 ); } public async Task CountCompletedByIngestorRunInfoIdAsync(Guid ingestorRunInfoId) { return await _context.DocumentProcessingInfos.CountAsync(documentProcessingInfo => documentProcessingInfo.IngestorRunInfoId.Equals(ingestorRunInfoId) && documentProcessingInfo.StatusType == ProcessStatusTypes.Completed ); } public async Task> FindByDocumentIdsAsync(Guid[] ids) => await _context.DocumentProcessingInfos.Where(i => i.DocumentId != null && ids.Contains(i.DocumentId.Value)).ToArrayAsync(); } }