using AsbCloudApp.Data.SAUB; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudDb.Model; using Mapster; using Microsoft.EntityFrameworkCore; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Repository { public class DrillTestRepository : IDrillTestRepository { private readonly IAsbCloudDbContext db; public DrillTestRepository(IAsbCloudDbContext db) { this.db = db; } public async Task GetAllAsync(int idTelemetry, FileReportRequest request, CancellationToken cancellationToken) { var query = db.DrillTests .Where(d => d.IdTelemetry == idTelemetry) .AsNoTracking(); if (request.GeDate.HasValue) { var startDate = new DateTime(request.GeDate.Value.Year, request.GeDate.Value.Month, request.GeDate.Value.Day); DateTimeOffset startDateUTC = DateTime.SpecifyKind(startDate, DateTimeKind.Utc); query = query.Where(q => q.TimeStampStart >= startDateUTC); } if (request.LeDate.HasValue) { var finishDate = new DateTime(request.LeDate.Value.Year, request.LeDate.Value.Month, request.LeDate.Value.Day); DateTimeOffset finishDateUTC = DateTime.SpecifyKind(finishDate, DateTimeKind.Utc); query = query.Where(q => q.TimeStampStart <= finishDateUTC); } var entities = await query.ToListAsync(cancellationToken); var dtos = entities.Select(e => e.Adapt()).ToArray(); return dtos; } public async Task GetAsync(int idTelemetry, int id, CancellationToken cancellationToken) { var drillTest = await db.DrillTests .Where(d => d.IdTelemetry == idTelemetry) .Where(d => d.Id == id) .FirstOrDefaultAsync(cancellationToken); if (drillTest is null) throw new Exception($"Drill test with id: {id} and idTelemetry: {idTelemetry} does not exist."); var dto = drillTest.Adapt(); return dto; } public async Task SaveDataAsync(int idTelemetry, DrillTestDto dto, CancellationToken token) { var entity = dto.Adapt(); entity.IdTelemetry = idTelemetry; db.DrillTests.Add(entity); var result = await db.SaveChangesAsync(token); return result; } } }