diff --git a/Distribution/Features/Invoice/InvoiceController.cs b/Distribution/Features/Invoice/InvoiceController.cs new file mode 100644 index 0000000..ce0650b --- /dev/null +++ b/Distribution/Features/Invoice/InvoiceController.cs @@ -0,0 +1,48 @@ +using Microsoft.AspNetCore.Mvc; + +namespace Distribution.Features.Invoice; + +[ApiController] +[Route("api/invoices")] +public class InvoiceController(InvoiceService service) : ControllerBase +{ + [HttpGet("{id:guid}")] + public async Task GetById(Guid id) + { + var result = await service.GetByIdAsync(id); + return result is null ? NotFound() : Ok(result); + } + + [HttpPost] + public async Task Create(CreateInvoiceRequest request, CancellationToken ct) + { + try + { + var result = await service.CreateAsync(request, ct); + return CreatedAtAction(nameof(GetById), new { id = result.Id }, result); + } + catch (InvalidOperationException ex) { return BadRequest(new { error = ex.Message }); } + } + + [HttpPost("{id:guid}/print")] + public async Task Print(Guid id, CancellationToken ct) + { + try + { + var result = await service.PrintAsync(id, ct); + return result is null ? NotFound() : Ok(result); + } + catch (InvalidOperationException ex) { return BadRequest(new { error = ex.Message }); } + } + + [HttpPost("{id:guid}/finalize")] + public async Task Finalize(Guid id, FinalizeInvoiceRequest request, CancellationToken ct) + { + try + { + var result = await service.FinalizeAsync(id, request, ct); + return result is null ? NotFound() : Ok(result); + } + catch (InvalidOperationException ex) { return BadRequest(new { error = ex.Message }); } + } +}