// *********************************************************************** // // 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 variant CRUD operations. /// [ApiVersion(MimeTypes.ApplicationVersion)] [Route("api/v{api-version:apiVersion}/[controller]")] [Produces(MimeTypes.ApplicationJson)] [Consumes(MimeTypes.ApplicationJson)] [ApiController] [AllowAnonymous] public class FurnitureVariantController(IFurnitureVariantProvider service) : ControllerBase { /// /// Gets all furniture variant records. /// [HttpGet] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task GetAllVariantsByModelIdAsync([FromRoute] string modelId, CancellationToken cancellationToken) { var result = await service.GetAllByModelIdAsync(modelId, cancellationToken).ConfigureAwait(false); if (result is null || !result.Any()) { return NotFound($"No variants found for base model with ID '{modelId}'."); } return Ok(result); } /// /// Gets a furniture variant record by ID. /// [HttpGet] [Route("{id}")] [ProducesResponseType(typeof(FurnitureVariant), 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 variant. /// [HttpPost] [ProducesResponseType(typeof(FurnitureVariant), StatusCodes.Status201Created)] public async Task CreateAsync([FromBody] FurnitureVariantRequest request, CancellationToken cancellationToken) { var result = await service.CreateAsync(request, cancellationToken); return Created("CreatedWithIdAsync", result); } /// /// Updates a furniture variant record by ID. /// [HttpPut] [Route("{id}")] [ProducesResponseType(typeof(FurnitureVariant), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task UpdateAsync([FromRoute] string id, [FromBody] FurnitureVariant entity, CancellationToken cancellationToken) { if (id != entity.Id?.ToString()) return BadRequest("Furniture Variant ID mismatch"); var result = await service.UpdateAsync(id, entity, cancellationToken); return Ok(result); } /// /// Changes the status of a furniture variant record. /// [HttpPatch] [Route("{id}/{newStatus}/ChangeStatus")] [ProducesResponseType(typeof(FurnitureVariant), 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); } } }