using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using vendorApproverBackend.Requests; using vendorApproverBackend.Enums; using vendorApproverBackend.Services; namespace vendorApproverBackend.Controllers { [ApiController] [Route("api/admin/products")] [Authorize(Roles = "ADMIN,EMPLOYEE,VENDOR,FINANCIAL,RENWE_APPROVER,MANAGER,PERFERMANCE_MANAGER")] public class AdminProductController : ControllerBase { private readonly ProductService _productService; public AdminProductController(ProductService productService) { _productService = productService; } [HttpGet("{id}", Name = "FindProductById")] public async Task FindProductById(long id) { var product = await _productService.FindByIdAsync(id); if (product == null) { return NotFound($"Product with ID {id} not found."); } return Ok(product); } [HttpDelete("{id}")] public async Task DeleteProduct(long id) { await _productService.DeleteAsync(id); return NoContent(); } [HttpGet] public async Task FetchAllProducts( [FromQuery] int page = 0, [FromQuery] int size = 5, [FromQuery] string? search = null, [FromQuery] string? sku = null, [FromQuery] string? category = null, [FromQuery] string? productType = null, [FromQuery] string? vendorName = null, [FromQuery] long? vendorId = null, [FromQuery] long? pqRequestId = null) { var pagedResult = await _productService.FindProductsByCriteriaAsync( page, size, sku, category, search, productType, vendorName, vendorId, pqRequestId); return Ok(pagedResult); } [HttpPatch("update-product/{id}")] public async Task UpdateProduct( long id, [FromBody] UpdateProductRequest request) { var updatedProduct = await _productService.UpdateProductAsync(id, request); return Ok(updatedProduct); } [HttpPost("import-product")] [Authorize(Roles = "ADMIN")] public async Task ImportLegacyProduct([FromBody] LegacyProductRequest request) { try { var product = await _productService.CreateLegacyProductAsync(request); return CreatedAtRoute("FindProductById", new { id = product.Id }, product); } catch (Exception ex) { // Log the error here return StatusCode(500, $"Internal server error: {ex.Message}"); } } } }