using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Data; using AsbCloudApp.Data.DailyReport; using AsbCloudApp.Data.DailyReport.Blocks.TimeBalance; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudDb; using AsbCloudDb.Model; using AsbCloudDb.Model.DailyReports; using Mapster; using Microsoft.EntityFrameworkCore; namespace AsbCloudInfrastructure.Repository; public class DailyReportRepository : CrudRepositoryBase, IDailyReportRepository { public DailyReportRepository(IAsbCloudDbContext dbContext) : base(dbContext) { } public async Task> GetAsync(int idWell, FileReportRequest request, CancellationToken cancellationToken) { var skip = request.Skip ?? 0; var take = request.Take ?? 10; var query = GetQuery().Where(d => d.IdWell == idWell); if (request.GeDate.HasValue) query = query.Where(d => d.Date >= request.GeDate.Value.ToDateTime(TimeOnly.MinValue, DateTimeKind.Utc)); if (request.LeDate.HasValue) query = query.Where(d => d.Date <= request.LeDate.Value.ToDateTime(TimeOnly.MinValue, DateTimeKind.Utc)); if (request.SortFields?.Any() == true) { query = query.SortBy(request.SortFields); } var entities = await query .Skip(skip) .Take(take) .AsNoTracking() .ToArrayAsync(cancellationToken); var dtos = entities.Select(Convert); return dtos; } public async Task GetOrDefaultAsync(int idWell, DateTime date, CancellationToken cancellationToken) { var entity = await GetQuery() .Include(d => d.Well) .AsNoTracking() .SingleOrDefaultAsync(d => d.IdWell == idWell && d.Date == date, cancellationToken); return entity is null ? null : Convert(entity); } protected override DailyReportDto Convert(DailyReport src) { var dto = base.Convert(src); if (dto.TimeBalanceBlock is null) return dto; dto.TimeBalanceBlock.WellDepth = new PlanFactDto() { Plan = src.TimeBalanceBlock?.WellDepthPlan }; if (src.TimeBalanceBlock?.WellOperations?.Any() == true) { dto.TimeBalanceBlock.WellOperations = src.TimeBalanceBlock.WellOperations.Select(w => { var wellOperation = w.Adapt(); wellOperation.DurationHours = new PlanFactDto() { Plan = w.DurationHoursPlan, Fact = w.DurationHoursFact }; return wellOperation; }); } return dto; } }