diff --git a/src/ReC.API/Controllers/ProfileController.cs b/src/ReC.API/Controllers/ProfileController.cs index 125dfb9..c2f1eb5 100644 --- a/src/ReC.API/Controllers/ProfileController.cs +++ b/src/ReC.API/Controllers/ProfileController.cs @@ -1,5 +1,9 @@ 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.Profile.Commands; using ReC.Application.Profile.Queries; namespace ReC.API.Controllers; @@ -13,4 +17,47 @@ public class ProfileController(IMediator mediator) : ControllerBase { return Ok(await mediator.Send(query, cancel)); } + + /// + /// Inserts a profile via the PROFILE insert procedure. + /// + /// InsertProfileProcedure payload. + /// A token to cancel the operation. + /// The created profile identifier. + [HttpPost] + [ProducesResponseType(StatusCodes.Status201Created)] + public async Task Post([FromBody] InsertProfileProcedure procedure, CancellationToken cancel) + { + var id = await mediator.ExecuteInsertProcedure(procedure, cancel: cancel); + return StatusCode(StatusCodes.Status201Created, id); + } + + /// + /// Updates a profile via the PROFILE update procedure. + /// + /// Profile identifier to update. + /// UpdateProfileProcedure 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] UpdateProfileProcedure procedure, CancellationToken cancel) + { + await mediator.ExecuteUpdateProcedure(procedure, id, cancel: cancel); + return NoContent(); + } + + /// + /// Deletes profile records via the PROFILE delete procedure for the specified id range. + /// + /// DeleteProfileProcedure payload (Start, End, Force). + /// A token to cancel the operation. + /// No content on success. + [HttpDelete] + [ProducesResponseType(StatusCodes.Status204NoContent)] + public async Task Delete([FromBody] DeleteProfileProcedure procedure, CancellationToken cancel) + { + await mediator.ExecuteDeleteProcedure(procedure, cancel); + return NoContent(); + } } \ No newline at end of file