using eprintServer.Entities; using eprintServer.Requests; using eprintServer.Responses; using eprintServer.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; namespace eprintServer.Controllers; [ApiController] [Route("api/[controller]")] [Authorize(Roles = "ADMIN,SUB_ADMIN,USER")] public class InvoiceController : ControllerBase { private readonly InvoiceService _invoiceService; public InvoiceController(InvoiceService invoiceService) { _invoiceService = invoiceService; } [HttpPost] public async Task> Create(InvoiceRequest request) { var invoice = await _invoiceService.CreateInvoiceAsync(request); return CreatedAtAction(nameof(GetById), new { id = invoice.Id }, invoice); } [HttpGet("{id}")] public async Task> GetById(long id) { var invoice = await _invoiceService.GetByIdAsync(id); if (invoice == null) return NotFound(); return Ok(invoice); } [HttpGet("get-all-invoices-pg")] public async Task>> GetAll( [FromQuery] int page = 0, [FromQuery] int size = 10, [FromQuery] long? userId = null) { var result = await _invoiceService.GetPagedInvoicesAsync(page, size, userId); return Ok(result); } [HttpDelete("{id}")] public async Task Delete(long id) { var result = await _invoiceService.DeleteInvoiceAsync(id); if (!result) return NotFound(); return NoContent(); } [HttpGet("invoices-stats")] public async Task> GetStats([FromQuery] long? userId = null) { var stats = await _invoiceService.GetInvoiceStatsAsync(userId); return Ok(stats); } }