feat(OrderController): add PostDocument to hand document upload process

This commit is contained in:
tekh 2025-08-18 10:26:36 +02:00
parent 6044d0bcb6
commit ccecf47dca
4 changed files with 34 additions and 5 deletions

View File

@ -5,8 +5,9 @@ using MediatR;
namespace Leanetec.EConnect.Client.Order;
public record PostDocumentRequest(string TenantId, int OrderId, StreamContent Content) : HttpRequest<Response<ProblemDetail>>
public record PostDocumentRequest(string TenantId, int OrderId) : HttpRequest<Response<ProblemDetail>>
{
public StreamContent Content { get; set; } = null!;
}
public class PostDocumentRequestHandler : IRequestHandler<PostDocumentRequest, Response<ProblemDetail>>

View File

@ -6,7 +6,15 @@ public record Response<TError>() 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; }
}

View File

@ -91,7 +91,6 @@ public class EConnectClient<TError> : IEConnectClient<TError> where TError : cl
}
public async Task<Response<TError>> PostAsync(string? route = null, object? queryParams = null, CancellationToken cancel = default)
where TData : class
{
route = AddQueryString(route, queryParams);
@ -118,7 +117,6 @@ public class EConnectClient<TError> : IEConnectClient<TError> where TError : cl
}
public async Task<Response<TError>> PostAsync(StreamContent content, string? route = null, object? queryParams = null, CancellationToken cancel = default)
where TData : class
{
route = AddQueryString(route, queryParams);

View File

@ -28,4 +28,26 @@ public class OrderController : ControllerBase
return StatusCode(res?.Error?.Status ?? 500, res?.Error);
}
}
[HttpPost("document")]
public async Task<IActionResult> 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);
}
}
}