using e_suite.API.Common; using e_suite.API.Common.models; using e_suite.Utilities.Pagination; using eSuite.API.Models; using eSuite.API.security; using eSuite.API.Utilities; using eSuite.Core.Miscellaneous; using eSuite.Core.Security; using Microsoft.AspNetCore.Mvc; namespace eSuite.API.Controllers; /// /// This part of the API is responsible for allowing a user to interact with sequences. /// [Route("api/[controller]")] [ApiController] public class SequencesController : ESuiteControllerBase { private readonly ISequenceManager _sequenceManager; /// /// /// /// public SequencesController(ISequenceManager sequenceManager) { _sequenceManager = sequenceManager; } /// /// Returns a list of all the sequences in the system /// /// This returns all the sequences in the system that are not soft deleted. [Route("sequences")] [HttpGet] [AccessKey(SecurityAccess.ViewSequence)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetSequences( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _sequenceManager.GetSequences(paging, cancellationToken); return Ok(result); } /// /// Returns the details of a specific sequence /// /// This returns all the sequences in the system that are not soft deleted. [Route("sequence")] [HttpGet] [AccessKey(SecurityAccess.ViewSequence)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetSequence( [FromQuery] long? id, [FromQuery] Guid? guid, CancellationToken cancellationToken = default! ) { var generalIdRef = new GeneralIdRef { Id = id, Guid = guid }; var result = await _sequenceManager.GetSequence(generalIdRef, cancellationToken); return Ok(result); } /// /// Create a sequence /// /// Contains the data required to create a sequence /// [Route("sequence")] [HttpPost] [AccessKey(SecurityAccess.AddSequence)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task CreateSequence( [FromBody] NewSequence createSequence, CancellationToken cancellationToken = default! ) { await _sequenceManager.CreateSequence(AuditUserDetails, createSequence, cancellationToken); return Ok(); } /// /// Edit a sequence /// /// All the fields can be edited except the Id and Guid field /// Contains the details of the updated sequence /// [Route("sequence")] [HttpPut] [AccessKey(SecurityAccess.EditSequence)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task EditSequence( [FromBody] Sequence editSequence, CancellationToken cancellationToken = default! ) { await _sequenceManager.EditSequence(AuditUserDetails, editSequence, cancellationToken); return Ok(); } /// /// Deletes a sequence /// /// This will perform a soft delete action. The sequence is not actually deleted. /// Either the id or the Guid of the sequence /// [Route("sequence")] [HttpDelete] [AccessKey(SecurityAccess.DeleteSequence)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task DeleteSequence( GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { await _sequenceManager.DeleteSequence(AuditUserDetails, generalIdRef, cancellationToken); return Ok(); } /// /// Issues one or more sequence numbers /// /// This will issue a sequence number acording to the pattern of the sequence. /// details of the sequence requested /// [Route("nextValue")] [HttpPost] [AccessKey(SecurityAccess.Everyone)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task NextValue( [FromBody] SequenceIssueRequest sequenceIssueRequest, CancellationToken cancellationToken = default! ) { var values = await _sequenceManager.NextValue(AuditUserDetails, sequenceIssueRequest.GeneralIdRef, sequenceIssueRequest.Count, cancellationToken); return Ok(values); } }