using FiscalFlow.Application.Commands.Invoices; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace FiscalFlow.API.Controllers; [ApiController] [Route("api/v1/invoices")] [Authorize] public partial class InvoicesController : ControllerBase { private readonly IMediator _mediator; public InvoicesController(IMediator mediator) { _mediator = mediator; } [HttpPost] [Consumes("multipart/form-data")] public async Task UploadInvoice([FromForm] UploadInvoiceRequest request) { var userId = GetUserId(); if (request.File == null || request.File.Length == 0) { return BadRequest(new { success = false, error = "No file uploaded" }); } if (!request.File.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase)) { return BadRequest(new { success = false, error = "Only PDF files are supported" }); } var command = new UploadInvoiceCommand( userId, request.Provider, request.File.FileName, request.File.OpenReadStream(), request.File.Length, request.File.ContentType); var result = await _mediator.Send(command); if (!result.Success) { return BadRequest(new { success = false, error = result.ErrorMessage }); } return Ok(new { success = true, data = result.Invoice }); } } public class UploadInvoiceRequest { public IFormFile? File { get; set; } public string Provider { get; set; } = "fortnox"; public bool AutoProcess { get; set; } = false; }