using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Persistence.Models; using Persistence.Repositories; 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] 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")] 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] 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")] public async Task> DeleteRange(IEnumerable ids, CancellationToken token) { var userId = User.GetUserId(); var result = await repository.MarkAsDeleted(userId, ids, token); return Ok(result); } [HttpGet] public async Task>> GetCurrent( Guid idDiscriminator, CancellationToken token) { var date = new DateTimeOffset(3000, 1, 1, 0, 0, 0, TimeSpan.Zero); var result = await repository.GetByDate(idDiscriminator, date, token); return Ok(result); } [HttpGet("moment")] public async Task>> GetByDate( Guid idDiscriminator, DateTimeOffset moment, CancellationToken token) { var result = await repository.GetByDate(idDiscriminator, moment, token); return Ok(result); } [HttpGet("history")] public async Task>> GetChangeLogForDate(Guid idDiscriminator, DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token) { var result = await repository.GetChangeLogForDate(idDiscriminator, dateBegin, dateEnd, token); return Ok(result); } [HttpPut] 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")] 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); } }