From ccecf47dca3347a1b72b7a1a729f2d9c86ad9957 Mon Sep 17 00:00:00 2001 From: TekH Date: Mon, 18 Aug 2025 10:26:36 +0200 Subject: [PATCH] feat(OrderController): add PostDocument to hand document upload process --- .../Order/PostDocumentRequest.cs | 3 ++- .../Entities/Response.cs | 12 ++++++++-- .../EConnectClient.cs | 2 -- .../Controllers/OrderController.cs | 22 +++++++++++++++++++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/Leanetec.EConnect.Client/Order/PostDocumentRequest.cs b/src/Leanetec.EConnect.Client/Order/PostDocumentRequest.cs index fb572d3..3aa4338 100644 --- a/src/Leanetec.EConnect.Client/Order/PostDocumentRequest.cs +++ b/src/Leanetec.EConnect.Client/Order/PostDocumentRequest.cs @@ -5,8 +5,9 @@ using MediatR; namespace Leanetec.EConnect.Client.Order; -public record PostDocumentRequest(string TenantId, int OrderId, StreamContent Content) : HttpRequest> +public record PostDocumentRequest(string TenantId, int OrderId) : HttpRequest> { + public StreamContent Content { get; set; } = null!; } public class PostDocumentRequestHandler : IRequestHandler> diff --git a/src/Leanetec.EConnect.Domain/Entities/Response.cs b/src/Leanetec.EConnect.Domain/Entities/Response.cs index 8206996..e9560f1 100644 --- a/src/Leanetec.EConnect.Domain/Entities/Response.cs +++ b/src/Leanetec.EConnect.Domain/Entities/Response.cs @@ -6,8 +6,16 @@ public record Response() where TError : class { public bool Ok { get; init; } - public HttpStatusCode? StatusCode { get; init; } - + private HttpStatusCode? _statusCode; + + public HttpStatusCode StatusCode + { + get => _statusCode ?? (Ok ? HttpStatusCode.OK : HttpStatusCode.InternalServerError); + init => _statusCode = value; + } + + public int StatusCodeInt => (int)StatusCode; + public TError? Error { get; init; } } diff --git a/src/Leanetec.EConnect.Infrastructure/EConnectClient.cs b/src/Leanetec.EConnect.Infrastructure/EConnectClient.cs index 35fb5fa..3f8d96a 100644 --- a/src/Leanetec.EConnect.Infrastructure/EConnectClient.cs +++ b/src/Leanetec.EConnect.Infrastructure/EConnectClient.cs @@ -91,7 +91,6 @@ public class EConnectClient : IEConnectClient where TError : cl } public async Task> PostAsync(string? route = null, object? queryParams = null, CancellationToken cancel = default) - where TData : class { route = AddQueryString(route, queryParams); @@ -118,7 +117,6 @@ public class EConnectClient : IEConnectClient where TError : cl } public async Task> PostAsync(StreamContent content, string? route = null, object? queryParams = null, CancellationToken cancel = default) - where TData : class { route = AddQueryString(route, queryParams); diff --git a/src/Leanetec.EConnect.Proxy/Controllers/OrderController.cs b/src/Leanetec.EConnect.Proxy/Controllers/OrderController.cs index b3c48a1..a7f395f 100644 --- a/src/Leanetec.EConnect.Proxy/Controllers/OrderController.cs +++ b/src/Leanetec.EConnect.Proxy/Controllers/OrderController.cs @@ -28,4 +28,26 @@ public class OrderController : ControllerBase return StatusCode(res?.Error?.Status ?? 500, res?.Error); } } + + [HttpPost("document")] + public async Task PostDocument(IFormFile file, [FromQuery] PostDocumentRequest request, CancellationToken cancel) + { + using var content = new MultipartFormDataContent(); + using var stream = file.OpenReadStream(); + using var streamContent = new StreamContent(stream); + streamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(file.ContentType); + content.Add(streamContent, "file", file.FileName); + request.Content = streamContent; + + var res = await _mediator.Send(request, cancel); + + if (res.Ok) + { + return StatusCode(res.StatusCodeInt); + } + else + { + return StatusCode(res?.Error?.Status ?? 500, res?.Error); + } + } } \ No newline at end of file