using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Persistence.Models; using Persistence.Models.Requests; using Persistence.Repositories; using System.Net; namespace Persistence.API.Controllers; [ApiController] [Authorize] [Route("api/[controller]")] public class ChangeLogController : ControllerBase, IChangeLogApi { private IChangeLogRepository repository; public ChangeLogController(IChangeLogRepository repository) { this.repository = repository; } [HttpPost] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task Add( Guid idDiscriminator, [FromBody] DataWithWellDepthAndSectionDto dto, CancellationToken token) { var userId = User.GetUserId(); var result = await repository.InsertRange(userId, idDiscriminator, [dto], token); return Ok(result); } [HttpPost("range")] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task AddRange( Guid idDiscriminator, [FromBody] IEnumerable dtos, CancellationToken token) { var userId = User.GetUserId(); var result = await repository.InsertRange(userId, idDiscriminator, dtos, token); return Ok(result); } [HttpDelete] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task Delete(Guid id, CancellationToken token) { var userId = User.GetUserId(); var result = await repository.MarkAsDeleted(userId, [id], token); return Ok(result); } [HttpDelete("range")] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task DeleteRange(IEnumerable ids, CancellationToken token) { var userId = User.GetUserId(); var result = await repository.MarkAsDeleted(userId, ids, token); return Ok(result); } [HttpPost("replace")] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task ClearAndInsertRange( Guid idDiscriminator, IEnumerable dtos, CancellationToken token) { var userId = User.GetUserId(); var result = await repository.ClearAndInsertRange(userId, idDiscriminator, dtos, token); return Ok(result); } [HttpPut] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task Update( Guid idDiscriminator, DataWithWellDepthAndSectionDto dto, CancellationToken token) { var userId = User.GetUserId(); var result = await repository.UpdateRange(userId, idDiscriminator, [dto], token); return Ok(result); } [HttpPut("range")] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task UpdateRange( Guid idDiscriminator, IEnumerable dtos, CancellationToken token) { var userId = User.GetUserId(); var result = await repository.UpdateRange(userId, idDiscriminator, dtos, token); return Ok(result); } [HttpGet] [ProducesResponseType(typeof(PaginationContainer), (int)HttpStatusCode.OK)] public async Task GetCurrent( Guid idDiscriminator, [FromQuery]SectionPartRequest request, CancellationToken token) { var moment = new DateTimeOffset(3000, 1, 1, 0, 0, 0, TimeSpan.Zero); var result = await repository.GetByDate(idDiscriminator, moment, request, token); return Ok(result); } [HttpGet("moment")] [ProducesResponseType(typeof(PaginationContainer), (int)HttpStatusCode.OK)] public async Task GetByDate( Guid idDiscriminator, DateTimeOffset moment, SectionPartRequest request, CancellationToken token) { var result = await repository.GetByDate(idDiscriminator, moment, request, token); return Ok(result); } [HttpGet("history")] [ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)] public async Task GetChangeLogForDate(Guid idDiscriminator, DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token) { var result = await repository.GetChangeLogForDate(idDiscriminator, dateBegin, dateEnd, token); return Ok(result); } [HttpGet("datesChange")] [ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)] public async Task GetDatesChange(Guid idDiscriminator, CancellationToken token) { var result = await repository.GetDatesChange(idDiscriminator, token); return Ok(result); } [HttpGet("part")] [ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)] public async Task GetPart(Guid idDiscriminator, DateTimeOffset dateBegin, int take = 86400, CancellationToken token = default) { var result = await repository.GetGtDate(idDiscriminator, dateBegin, token); return Ok(result); } [HttpGet("datesRange")] [ProducesResponseType(typeof(DatesRangeDto), (int)HttpStatusCode.OK)] public async Task GetDatesRangeAsync(Guid idDiscriminator, CancellationToken token) { var result = await repository.GetDatesRange(idDiscriminator, token); return Ok(result); } }