// *********************************************************************** // // Core.Inventory // // *********************************************************************** using Asp.Versioning; using Core.Adapters.Lib; using Core.Blueprint.Logging; using Core.Blueprint.Mongo; using Core.Inventory.Domain.Contexts.Inventory.Request; using Core.Inventory.Provider.Contracts; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Core.Inventory.DAL.API.Controllers { /// /// Handles all requests for furniture base CRUD operations. /// [ApiVersion(MimeTypes.ApplicationVersion)] [Route("api/v{api-version:apiVersion}/[controller]")] [Produces(MimeTypes.ApplicationJson)] [Consumes(MimeTypes.ApplicationJson)] [ApiController] [AllowAnonymous] public class FurnitureBaseController(IFurnitureBaseProvider service) : ControllerBase { /// /// Gets all furniture base records. /// [HttpGet] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task GetAllAsync(CancellationToken cancellationToken) { var result = await service.GetAllAsync(cancellationToken); return Ok(result); } /// /// Gets a furniture base record by ID. /// [HttpGet] [Route("{id}")] [ProducesResponseType(typeof(FurnitureBase), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetByIdAsync([FromRoute] string id, CancellationToken cancellationToken) { var result = await service.GetByIdAsync(id, cancellationToken); return result is not null ? Ok(result) : NotFound("Entity not found"); } /// /// Creates a new furniture base record. /// [HttpPost] [ProducesResponseType(typeof(FurnitureBase), StatusCodes.Status201Created)] public async Task CreateAsync([FromBody] FurnitureBaseRequest request, CancellationToken cancellationToken) { var result = await service.CreateAsync(request, cancellationToken); return Created("CreatedWithIdAsync", result); } /// /// Updates a furniture base record by ID. /// [HttpPut] [Route("{id}")] [ProducesResponseType(typeof(FurnitureBase), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task UpdateAsync([FromRoute] string id, [FromBody] FurnitureBase entity, CancellationToken cancellationToken) { if (id != entity.Id?.ToString()) return BadRequest("Furniture ID mismatch"); var result = await service.UpdateAsync(id, entity, cancellationToken); return Ok(result); } /// /// Changes the status of a furniture base record. /// [HttpPatch] [Route("{id}/{newStatus}/ChangeStatus")] [ProducesResponseType(typeof(FurnitureBase), StatusCodes.Status200OK)] public async Task ChangeStatusAsync([FromRoute] string id, [FromRoute] StatusEnum newStatus, CancellationToken cancellationToken) { var result = await service.ChangeStatusAsync(id, newStatus, cancellationToken); return Ok(result); } } }