using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Distribution.Features.ExpenseVendor; [ApiController] [Route("api/expense-vendors")] public class ExpenseVendorController(ExpenseVendorService service) : ControllerBase { [HttpGet] [Authorize("expense.view")] public async Task List( [FromQuery] string? search, [FromQuery] int page = 1, [FromQuery] int pageSize = 50) => Ok(await service.ListAsync(search, page, pageSize)); [HttpPost] [Authorize("expense.manage_categories")] public async Task Create(CreateExpenseVendorRequest request, CancellationToken ct) { try { return Ok(await service.CreateAsync(request, ct)); } catch (InvalidOperationException ex) { return BadRequest(new { error = ex.Message }); } } [HttpPut("{id:guid}")] [Authorize("expense.manage_categories")] public async Task Update(Guid id, UpdateExpenseVendorRequest request, CancellationToken ct) { try { var result = await service.UpdateAsync(id, request, ct); return result is null ? NotFound() : Ok(result); } catch (InvalidOperationException ex) { return BadRequest(new { error = ex.Message }); } } }