правки

This commit is contained in:
Olga Nemt 2024-05-31 15:58:28 +05:00
parent d414fad58c
commit 459fc3acb8
6 changed files with 41 additions and 24 deletions

View File

@ -11,7 +11,7 @@ namespace AsbCloudApp.Repositories;
/// Репозиторий для записей с историей /// Репозиторий для записей с историей
/// </summary> /// </summary>
public interface IChangeLogRepository<TDto, TRequest> public interface IChangeLogRepository<TDto, TRequest>
where TDto : AsbCloudApp.Data.IId where TDto : IId
{ {
/// <summary> /// <summary>
/// Добавление записей /// Добавление записей
@ -83,7 +83,7 @@ public interface IChangeLogRepository<TDto, TRequest>
/// <param name="date">Фильтр по дате. Если null - вернет все записи, без привязки к дате</param> /// <param name="date">Фильтр по дате. Если null - вернет все записи, без привязки к дате</param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<ChangeLogDto<TDto>>> GetChangeLog(TRequest request, DateOnly? date, CancellationToken token); Task<IEnumerable<ChangeLogDto<TDto>>> GetChangeLogForDate(TRequest request, DateOnly? date, CancellationToken token);
/// <summary> /// <summary>
/// Получение текущих сейчас записей по параметрам /// Получение текущих сейчас записей по параметрам
@ -92,4 +92,13 @@ public interface IChangeLogRepository<TDto, TRequest>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<TDto>> GetCurrent(TRequest request, CancellationToken token); Task<IEnumerable<TDto>> GetCurrent(TRequest request, CancellationToken token);
/// <summary>
/// Получение измененных записей за определенный момент времени
/// </summary>
/// <param name="changeLogRequest">фильтр по changeLog</param>
/// <param name="dataRequest">фильтр по данным внутри changeLog</param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<ChangeLogDto<TDto>>> GetChangeLogByMoment(ChangeLogRequest changeLogRequest, TRequest dataRequest, CancellationToken token);
} }

View File

@ -3,9 +3,9 @@
namespace AsbCloudApp.Requests; namespace AsbCloudApp.Requests;
/// <summary> /// <summary>
/// Базовый запрос актуальных данных /// Запрос изменений
/// </summary> /// </summary>
public class ChangeLogBaseRequest public class ChangeLogRequest
{ {
/// <summary> /// <summary>
/// Дата/время на которую записи были актуальны. Если не задано, то возвращаются все данные без учета их актуальности /// Дата/время на которую записи были актуальны. Если не задано, то возвращаются все данные без учета их актуальности
@ -15,7 +15,7 @@ public class ChangeLogBaseRequest
/// <summary> /// <summary>
/// Конструктор /// Конструктор
/// </summary> /// </summary>
public ChangeLogBaseRequest() public ChangeLogRequest()
{ {
} }
@ -24,7 +24,7 @@ public class ChangeLogBaseRequest
/// Копирующий конструктор /// Копирующий конструктор
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
public ChangeLogBaseRequest(ChangeLogBaseRequest request) public ChangeLogRequest(ChangeLogRequest request)
{ {
Moment = request.Moment; Moment = request.Moment;
} }

View File

@ -5,7 +5,7 @@ namespace AsbCloudApp.Requests;
/// <summary> /// <summary>
/// Запрос для получения РТК план /// Запрос для получения РТК план
/// </summary> /// </summary>
public class ProcessMapPlanBaseRequest : ChangeLogBaseRequest public class ProcessMapPlanBaseRequest : ChangeLogRequest
{ {
/// <summary> /// <summary>
/// Вернуть данные, которые поменялись с указанной даты /// Вернуть данные, которые поменялись с указанной даты

View File

@ -17,7 +17,7 @@ namespace AsbCloudInfrastructure.Repository;
public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : IChangeLogRepository<TDto, TRequest> public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : IChangeLogRepository<TDto, TRequest>
where TDto : AsbCloudApp.Data.IId where TDto : AsbCloudApp.Data.IId
where TEntity : ChangeLogAbstract where TEntity : ChangeLogAbstract
where TRequest : ChangeLogBaseRequest where TRequest : ChangeLogRequest
{ {
protected readonly IAsbCloudDbContext db; protected readonly IAsbCloudDbContext db;
@ -218,7 +218,7 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
return datesOnly; return datesOnly;
} }
public async Task<IEnumerable<ChangeLogDto<TDto>>> GetChangeLog(TRequest request, DateOnly? date, CancellationToken token) public async Task<IEnumerable<ChangeLogDto<TDto>>> GetChangeLogForDate(TRequest request, DateOnly? date, CancellationToken token)
{ {
var query = BuildQuery(request); var query = BuildQuery(request);
TimeSpan offset = GetTimezoneOffset(request); TimeSpan offset = GetTimezoneOffset(request);
@ -251,18 +251,18 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
return dtos; return dtos;
} }
public async Task<IEnumerable<ChangeLogDto<TDto>>> Get(TRequest request, DateTimeOffset? moment, CancellationToken token) public async Task<IEnumerable<ChangeLogDto<TDto>>> GetChangeLogByMoment(ChangeLogRequest changeLogRequest, TRequest dataRequest, CancellationToken token)
{ {
var query = BuildQuery(request); var query = BuildQuery(dataRequest);
if (moment.HasValue) if (changeLogRequest.Moment.HasValue)
{ {
var momentUtc = moment.Value.ToUniversalTime(); var momentUtc = changeLogRequest.Moment.Value.ToUniversalTime();
query = query query = query
.Where(e => e.Creation <= momentUtc) .Where(e => e.Creation <= momentUtc)
.Where(e => e.Obsolete == null || e.Obsolete >= momentUtc); .Where(e => e.Obsolete == null || e.Obsolete >= momentUtc);
} }
TimeSpan offset = GetTimezoneOffset(request); TimeSpan offset = GetTimezoneOffset(dataRequest);
var dtos = await CreateChangeLogDto(query, offset, token); var dtos = await CreateChangeLogDto(query, offset, token);
return dtos; return dtos;
@ -270,8 +270,11 @@ public abstract class ChangeLogRepositoryAbstract<TDto, TEntity, TRequest> : ICh
public async Task<IEnumerable<TDto>> GetCurrent(TRequest request, CancellationToken token) public async Task<IEnumerable<TDto>> GetCurrent(TRequest request, CancellationToken token)
{ {
var moment = new DateTimeOffset(3000, 1, 1, 0, 0, 0, TimeSpan.Zero); var changeLogRequest = new ChangeLogRequest()
var entities = await Get(request, moment, token); {
Moment = new DateTimeOffset(3000, 1, 1, 0, 0, 0, TimeSpan.Zero)
};
var entities = await GetChangeLogByMoment(changeLogRequest, request, token);
var result = entities.Select(e => e.Item); var result = entities.Select(e => e.Item);
return result; return result;
} }

View File

@ -48,7 +48,7 @@ public class ProcessMapReportDrillingService : IProcessMapReportDrillingService
return Enumerable.Empty<ProcessMapReportDataSaubStatDto>(); return Enumerable.Empty<ProcessMapReportDataSaubStatDto>();
var requestProcessMapPlan = new ProcessMapPlanBaseRequestWithWell(idWell); var requestProcessMapPlan = new ProcessMapPlanBaseRequestWithWell(idWell);
var changeLogProcessMaps = await processMapPlanBaseRepository.GetChangeLog(requestProcessMapPlan, null, token); var changeLogProcessMaps = await processMapPlanBaseRepository.GetChangeLogForDate(requestProcessMapPlan, null, token);
if (!changeLogProcessMaps.Any()) if (!changeLogProcessMaps.Any())
return Enumerable.Empty<ProcessMapReportDataSaubStatDto>(); return Enumerable.Empty<ProcessMapReportDataSaubStatDto>();

View File

@ -155,10 +155,10 @@ public abstract class ProcessMapPlanBaseController<TDto> : ControllerBase
/// <param name="moment"></param> /// <param name="moment"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("history")] [HttpGet("changelogByMoment")]
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
public async Task<ActionResult<IEnumerable<ChangeLogDto<TDto>>>> GetHistory([FromRoute] int idWell, DateTimeOffset? moment, CancellationToken token) public async Task<ActionResult<IEnumerable<ChangeLogDto<TDto>>>> GetChangeLogByMoment([FromRoute] int idWell, DateTimeOffset? moment, CancellationToken token)
{ {
await AssertUserHasAccessToWell(idWell, token); await AssertUserHasAccessToWell(idWell, token);
@ -167,7 +167,12 @@ public abstract class ProcessMapPlanBaseController<TDto> : ControllerBase
Moment = moment, Moment = moment,
}; };
var result = await repository.GetChangeLog(serviceRequest, null, token); var changeLogRequest = new ChangeLogRequest()
{
Moment = moment
};
var result = await repository.GetChangeLogByMoment(changeLogRequest, serviceRequest, token);
return Ok(result); return Ok(result);
} }
@ -194,7 +199,7 @@ public abstract class ProcessMapPlanBaseController<TDto> : ControllerBase
UpdateFrom = updateFrom, UpdateFrom = updateFrom,
}; };
var result = await repository.GetChangeLog(serviceRequest, null, token); var result = await repository.GetChangeLogForDate(serviceRequest, null, token);
return Ok(result); return Ok(result);
} }
@ -205,15 +210,15 @@ public abstract class ProcessMapPlanBaseController<TDto> : ControllerBase
/// <param name="date"></param> /// <param name="date"></param>
/// <param name="token"></param> /// <param name="token"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("changeLog")] [HttpGet("changeLogForDate")]
[ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
public async Task<ActionResult<IEnumerable<ChangeLogDto<TDto>>>> GetChangeLog([FromRoute] int idWell, [FromQuery] DateOnly? date, CancellationToken token) public async Task<ActionResult<IEnumerable<ChangeLogDto<TDto>>>> GetChangeLogForDate([FromRoute] int idWell, [FromQuery] DateOnly? date, CancellationToken token)
{ {
await AssertUserHasAccessToWell(idWell, token); await AssertUserHasAccessToWell(idWell, token);
var serviceRequest = new ProcessMapPlanBaseRequestWithWell(idWell); var serviceRequest = new ProcessMapPlanBaseRequestWithWell(idWell);
var result = await repository.GetChangeLog(serviceRequest, date, token); var result = await repository.GetChangeLogForDate(serviceRequest, date, token);
return Ok(result); return Ok(result);
} }