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