using MediatR; using Microsoft.AspNetCore.Mvc; using ReC.Application.Common.Procedures.DeleteProcedure; using ReC.Application.Common.Procedures.InsertProcedure; using ReC.Application.Common.Procedures.UpdateProcedure; using ReC.Application.Results.Commands; using ReC.Application.Results.Queries; namespace ReC.API.Controllers; [Route("api/[controller]")] [ApiController] public class ResultController(IMediator mediator) : ControllerBase { /// /// Gets output results based on the provided query parameters. /// /// The query to filter output results. /// A token to cancel the operation. /// A list of output results matching the query. [HttpGet] [ProducesResponseType(StatusCodes.Status200OK)] public async Task Get([FromQuery] ReadResultViewQuery query, CancellationToken cancel) => Ok(await mediator.Send(query, cancel)); /// /// Inserts a RESULT record via the insert procedure. /// /// InsertResultProcedure payload. /// A token to cancel the operation. /// The created RESULT identifier. [HttpPost] [ProducesResponseType(StatusCodes.Status201Created)] public async Task Post([FromBody] InsertResultProcedure procedure, CancellationToken cancel) { var id = await mediator.ExecuteInsertProcedure(procedure, cancel: cancel); return CreatedAtAction(nameof(Get), new { actionId = procedure.ActionId }, new { id, procedure.ActionId }); } /// /// Updates a RESULT record via the update procedure. /// /// RESULT identifier to update. /// UpdateResultProcedure payload. /// A token to cancel the operation. /// No content on success. [HttpPut("{id:long}")] [ProducesResponseType(StatusCodes.Status204NoContent)] public async Task Put([FromRoute] long id, [FromBody] UpdateResultProcedure procedure, CancellationToken cancel) { await mediator.ExecuteUpdateProcedure(procedure, id, cancel: cancel); return NoContent(); } /// /// Deletes RESULT records via the delete procedure for the specified id range. /// /// DeleteResultProcedure payload (Start, End, Force). /// A token to cancel the operation. /// No content on success. [HttpDelete] [ProducesResponseType(StatusCodes.Status204NoContent)] public async Task Delete([FromBody] DeleteResultProcedure procedure, CancellationToken cancel) { await mediator.ExecuteDeleteProcedure(procedure, cancel); return NoContent(); } }