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();
}
}