Правки по ревью

This commit is contained in:
Olga Nemt 2024-05-31 11:53:58 +05:00
parent 63280b60e2
commit c129825eaa
7 changed files with 58 additions and 53 deletions

View File

@ -12,12 +12,11 @@ namespace AsbCloudApp.Repositories;
/// </summary> /// </summary>
public interface IChangeLogRepository<TDto, TRequest> public interface IChangeLogRepository<TDto, TRequest>
where TDto : AsbCloudApp.Data.IId where TDto : AsbCloudApp.Data.IId
where TRequest : ChangeLogBaseRequest
{ {
/// <summary> /// <summary>
/// Добавление записей /// Добавление записей
/// </summary> /// </summary>
/// <param name="idUser"></param> /// <param name="idUser">пользователь, который добавляет</param>
/// <param name="dtos"></param> /// <param name="dtos"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
@ -26,7 +25,7 @@ public interface IChangeLogRepository<TDto, TRequest>
/// <summary> /// <summary>
/// Редактирование записей /// Редактирование записей
/// </summary> /// </summary>
/// <param name="idUser"></param> /// <param name="idUser">пользователь, который редактирует</param>
/// <param name="dtos"></param> /// <param name="dtos"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
@ -35,17 +34,17 @@ public interface IChangeLogRepository<TDto, TRequest>
/// <summary> /// <summary>
/// Добавляет Dto у которых id == 0, изменяет dto у которых id != 0 /// Добавляет Dto у которых id == 0, изменяет dto у которых id != 0
/// </summary> /// </summary>
/// <param name="idUser"></param> /// <param name="idUser">пользователь, который редактирует или добавляет</param>
/// <param name="dtos"></param> /// <param name="dtos"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<int> UpdateOrInsertRange(int idUser, IEnumerable<TDto> dtos, CancellationToken token); Task<int> UpdateOrInsertRange(int idUser, IEnumerable<TDto> dtos, CancellationToken token);
/// <summary> /// <summary>
/// Добавление записей с удалением старых (для импорта) /// Помечает записи как удаленные
/// </summary> /// </summary>
/// <param name="idUser"></param> /// <param name="idUser">пользователь, который чистит</param>
/// <param name="request"></param> /// <param name="request">Фильтр по свойствам конкретной сущности</param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<int> Clear(int idUser, TRequest request, CancellationToken token); Task<int> Clear(int idUser, TRequest request, CancellationToken token);
@ -87,10 +86,10 @@ public interface IChangeLogRepository<TDto, TRequest>
Task<IEnumerable<ChangeLogDto<TDto>>> GetChangeLog(TRequest request, DateOnly? date, CancellationToken token); Task<IEnumerable<ChangeLogDto<TDto>>> GetChangeLog(TRequest request, DateOnly? date, CancellationToken token);
/// <summary> /// <summary>
/// Получение записей по параметрам /// Получение текущих сейчас записей по параметрам
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<TDto>> Get(TRequest request, CancellationToken token); Task<IEnumerable<TDto>> GetCurrent(TRequest request, CancellationToken token);
} }

View File

@ -1,5 +1,4 @@
using AsbCloudApp.Data; using AsbCloudApp.Data;
using AsbCloudApp.Data.ProcessMaps;
using AsbCloudApp.Exceptions; using AsbCloudApp.Exceptions;
using AsbCloudApp.Repositories; using AsbCloudApp.Repositories;
using AsbCloudApp.Requests; using AsbCloudApp.Requests;
@ -235,28 +234,46 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
query = createdQuery.Union(editedQuery); query = createdQuery.Union(editedQuery);
} }
var dtos = await CreateChangeLogDto(query, offset, token);
return dtos;
}
private async Task<IEnumerable<ChangeLogDto<TDto>>> CreateChangeLogDto(IQueryable<TEntity> query, TimeSpan offset, CancellationToken token)
{
var entities = await query var entities = await query
.OrderBy(e => e.Creation) .OrderBy(e => e.Creation)
.ThenBy(e => e.Obsolete) .ThenBy(e => e.Obsolete)
.ThenBy(e => e.Id) .ThenBy(e => e.Id)
.ToListAsync(token); .ToListAsync(token);
var dtos = entities.Select(e => ConvertChangeLogDto(e, offset)); var dtos = entities.Select(e => ConvertChangeLogDto(e, offset));
return dtos;
}
public async Task<IEnumerable<ChangeLogDto<TDto>>> Get(TRequest request, DateTimeOffset? moment, CancellationToken token)
{
var query = BuildQuery(request);
if (moment.HasValue)
{
var momentUtc = moment.Value.ToUniversalTime();
query = query
.Where(e => e.Creation <= momentUtc)
.Where(e => e.Obsolete == null || e.Obsolete >= momentUtc);
}
TimeSpan offset = GetTimezoneOffset(request);
var dtos = await CreateChangeLogDto(query, offset, token);
return dtos; return dtos;
} }
public async Task<IEnumerable<TDto>> Get(TRequest request, CancellationToken token) public async Task<IEnumerable<TDto>> GetCurrent(TRequest request, CancellationToken token)
{ {
var query = BuildQuery(request); var moment = new DateTimeOffset(3000, 1, 1, 0, 0, 0, TimeSpan.Zero);
var entities = await query var entities = await Get(request, moment, token);
.Where(e => e.Obsolete == null) var result = entities.Select(e => e.Item);
.OrderBy(e => e.Creation) return result;
.ThenBy(e => e.Id)
.ToArrayAsync(token);
TimeSpan offset = GetTimezoneOffset(request);
var dtos = entities.Select(e => Convert(e, offset));
return dtos;
} }
protected abstract TimeSpan GetTimezoneOffset(TRequest request); protected abstract TimeSpan GetTimezoneOffset(TRequest request);
@ -268,7 +285,7 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
var entity = dto.Adapt<TEntity>(); var entity = dto.Adapt<TEntity>();
entity.Creation = entity.Creation.ToUniversalTime(); entity.Creation = entity.Creation.ToUniversalTime();
if(entity.Obsolete.HasValue) if (entity.Obsolete.HasValue)
entity.Obsolete = entity.Obsolete.Value.ToUniversalTime(); entity.Obsolete = entity.Obsolete.Value.ToUniversalTime();
return entity; return entity;

View File

@ -37,13 +37,7 @@ public class ProcessMapPlanBaseRepository<TDto, TEntity> : ChangeLogRepositoryAb
query = query.Where(e => e.Creation >= from || e.Obsolete >= from); query = query.Where(e => e.Creation >= from || e.Obsolete >= from);
} }
if (request.Moment.HasValue)
{
var moment = request.Moment.Value.ToUniversalTime();
query = query
.Where(e => e.Creation <= moment)
.Where(e => e.Obsolete == null || e.Obsolete >= moment);
}
return query; return query;
} }

View File

@ -33,7 +33,7 @@ public abstract class ProcessMapPlanExportService<TDto> : ExportExcelService<TDt
Moment = DateTimeOffset.UtcNow Moment = DateTimeOffset.UtcNow
}; };
var dtos = await processMapPlanRepository.Get(request, token); var dtos = await processMapPlanRepository.GetCurrent(request, token);
return dtos; return dtos;
} }
} }

View File

@ -50,7 +50,7 @@ public class WellInfoService
var processMapPlanWellDrillings = new List<ProcessMapPlanDrillingDto>(); var processMapPlanWellDrillings = new List<ProcessMapPlanDrillingDto>();
foreach (var processMapPlanWellDrillingRequest in processMapPlanWellDrillingRequests) foreach (var processMapPlanWellDrillingRequest in processMapPlanWellDrillingRequests)
{ {
var processMaps = await processMapPlanWellDrillingRepository.Get(processMapPlanWellDrillingRequest, token); var processMaps = await processMapPlanWellDrillingRepository.GetCurrent(processMapPlanWellDrillingRequest, token);
processMapPlanWellDrillings.AddRange(processMaps); processMapPlanWellDrillings.AddRange(processMaps);
} }

View File

@ -1,21 +1,16 @@
using System; using AsbCloudApp.Data;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Data.ProcessMaps; using AsbCloudApp.Data.ProcessMaps;
using AsbCloudApp.Data.WellOperation; using AsbCloudApp.Data.WellOperation;
using AsbCloudApp.Repositories; using AsbCloudApp.Repositories;
using AsbCloudApp.Requests; using AsbCloudApp.Requests;
using AsbCloudApp.Services; using AsbCloudApp.Services;
using AsbCloudDb.Model; using AsbCloudDb.Model;
using AsbCloudInfrastructure.Repository;
using AsbCloudInfrastructure.Services.ProcessMaps;
using AsbCloudInfrastructure.Services.ProcessMaps.Report; using AsbCloudInfrastructure.Services.ProcessMaps.Report;
using DocumentFormat.OpenXml.Bibliography;
using DocumentFormat.OpenXml.Spreadsheet;
using NSubstitute; using NSubstitute;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Xunit; using Xunit;
namespace AsbCloudWebApi.Tests.Services.ProcessMaps; namespace AsbCloudWebApi.Tests.Services.ProcessMaps;
@ -42,7 +37,7 @@ public class ProcessMapReportDataSaubStatServiceTest
private ProcessMapReportDrillingService service; private ProcessMapReportDrillingService service;
private readonly static SimpleTimezoneDto timezone = new() { Hours = 2 }; private readonly static SimpleTimezoneDto timezone = new() { Hours = 2 };
private static readonly DateTimeOffset dateStart = new (2024, 01, 01, 00, 11, 11, timezone.Offset); private static readonly DateTimeOffset dateStart = new(2024, 01, 01, 00, 11, 11, timezone.Offset);
private readonly static WellDto well = new() private readonly static WellDto well = new()
{ {
Id = 1, Id = 1,
@ -259,7 +254,7 @@ public class ProcessMapReportDataSaubStatServiceTest
wellService.GetOrDefaultAsync(Arg.Any<int>(), Arg.Any<CancellationToken>()) wellService.GetOrDefaultAsync(Arg.Any<int>(), Arg.Any<CancellationToken>())
.Returns(well); .Returns(well);
processMapPlanBaseRepository.Get(Arg.Any<ProcessMapPlanBaseRequestWithWell>(), Arg.Any<CancellationToken>()) processMapPlanBaseRepository.GetCurrent(Arg.Any<ProcessMapPlanBaseRequestWithWell>(), Arg.Any<CancellationToken>())
.Returns(processMapPlan); .Returns(processMapPlan);
wellOperationRepository.GetAsync(Arg.Any<WellOperationRequest>(), Arg.Any<CancellationToken>()) wellOperationRepository.GetAsync(Arg.Any<WellOperationRequest>(), Arg.Any<CancellationToken>())

View File

@ -144,7 +144,7 @@ public abstract class ProcessMapPlanBaseController<TDto> : ControllerBase
await AssertUserHasAccessToWell(idWell, token); await AssertUserHasAccessToWell(idWell, token);
var serviceRequest = new ProcessMapPlanBaseRequestWithWell(idWell); var serviceRequest = new ProcessMapPlanBaseRequestWithWell(idWell);
var result = await repository.Get(serviceRequest, token); var result = await repository.GetCurrent(serviceRequest, token);
return Ok(result); return Ok(result);
} }