Улучшения, теперь работает http и grpc

Но ещё требуется ревью и чистка
This commit is contained in:
2026-06-01 18:10:42 +03:00
parent 50626c6ac6
commit 1b85ec5ce8
6 changed files with 46 additions and 16 deletions

View File

@@ -38,9 +38,11 @@ public sealed class HttpSmsClient : ISmsClient, IDisposable
{ {
var request = new SendOrderApiRequest var request = new SendOrderApiRequest
{ {
CommandParameters = new SendOrderParameters( CommandParameters = new SendOrderParameters
order.Id.ToString(), {
order.Items.ToList()), OrderId = order.Id.ToString(),
MenuItems = order.Items.ToList(),
},
}; };
var response = await SendAsync(request, cancellationToken); var response = await SendAsync(request, cancellationToken);
@@ -66,8 +68,31 @@ public sealed class HttpSmsClient : ISmsClient, IDisposable
} }
var responseJson = await httpResponse.Content.ReadAsStringAsync(cancellationToken); var responseJson = await httpResponse.Content.ReadAsStringAsync(cancellationToken);
if (string.IsNullOrWhiteSpace(responseJson))
{
return new ApiResponse
{
Command = request.Command,
Success = false,
ErrorMessage = $"Пустой ответ сервера (HTTP {(int)httpResponse.StatusCode}).",
};
}
try
{
return ApiResponseDeserializer.Deserialize(responseJson); return ApiResponseDeserializer.Deserialize(responseJson);
} }
catch (JsonException)
{
return new ApiResponse
{
Command = request.Command,
Success = false,
ErrorMessage = $"Некорректный JSON в ответе (HTTP {(int)httpResponse.StatusCode}): {responseJson}",
};
}
}
private static GetMenuApiResponse ToGetMenuResponse(ApiResponse response) => private static GetMenuApiResponse ToGetMenuResponse(ApiResponse response) =>
response as GetMenuApiResponse ?? new GetMenuApiResponse response as GetMenuApiResponse ?? new GetMenuApiResponse

View File

@@ -31,6 +31,15 @@ public sealed class ApiController(ISmsApiService apiService) : ControllerBase
ErrorMessage = $"Некорректный JSON: {ex.Message}", ErrorMessage = $"Некорректный JSON: {ex.Message}",
}); });
} }
catch (Exception ex)
{
return Ok(new ApiResponse
{
Command = "",
Success = false,
ErrorMessage = ex.Message,
});
}
return Ok(apiService.Handle(request)); return Ok(apiService.Handle(request));
} }

View File

@@ -39,7 +39,7 @@ internal sealed class SmsApiService(IMenuStore store) : ISmsApiService
return FailSendOrder("CommandParameters не указаны или имеют неверный формат."); return FailSendOrder("CommandParameters не указаны или имеют неверный формат.");
} }
var items = parameters.MenuItems var items = (parameters.MenuItems ?? [])
.Select(item => (item.Id, item.Quantity)) .Select(item => (item.Id, item.Quantity))
.ToList(); .ToList();

View File

@@ -3,7 +3,7 @@
"Default": "Host=localhost;Port=5432;Database=sms_task;Username=sms;Password=sms" "Default": "Host=localhost;Port=5432;Database=sms_task;Username=sms;Password=sms"
}, },
"ApiClient": { "ApiClient": {
"Backend": "Grpc" "Backend": "Http"
}, },
"Http": { "Http": {
"BaseUrl": "http://localhost:5053", "BaseUrl": "http://localhost:5053",

View File

@@ -2,12 +2,9 @@ using Domain.Entities;
namespace Contracts.Menu; namespace Contracts.Menu;
public sealed record GetMenuData(IReadOnlyList<Dish> MenuItems) public sealed record GetMenuData
{ {
public GetMenuData() public IReadOnlyList<Dish> MenuItems { get; init; } = [];
: this([])
{
}
public override string ToString() => public override string ToString() =>
string.Join(Environment.NewLine, MenuItems); string.Join(Environment.NewLine, MenuItems);

View File

@@ -2,12 +2,11 @@ using Domain.Entities;
namespace Contracts.Orders; namespace Contracts.Orders;
public sealed record SendOrderParameters(string OrderId, IReadOnlyList<OrderItem> MenuItems) public sealed record SendOrderParameters
{ {
public SendOrderParameters(string OrderId) public required string OrderId { get; init; }
: this(OrderId, [])
{ public IReadOnlyList<OrderItem> MenuItems { get; init; } = [];
}
public override string ToString() => public override string ToString() =>
$"OrderId={OrderId}, Items=[{string.Join("; ", MenuItems)}]"; $"OrderId={OrderId}, Items=[{string.Join("; ", MenuItems)}]";