62 lines
1.7 KiB
C#
62 lines
1.7 KiB
C#
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<IActionResult> 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;
|
|
}
|