Улучшения, теперь работает http и grpc
Но ещё требуется ревью и чистка
This commit is contained in:
@@ -38,9 +38,11 @@ public sealed class HttpSmsClient : ISmsClient, IDisposable
|
||||
{
|
||||
var request = new SendOrderApiRequest
|
||||
{
|
||||
CommandParameters = new SendOrderParameters(
|
||||
order.Id.ToString(),
|
||||
order.Items.ToList()),
|
||||
CommandParameters = new SendOrderParameters
|
||||
{
|
||||
OrderId = order.Id.ToString(),
|
||||
MenuItems = order.Items.ToList(),
|
||||
},
|
||||
};
|
||||
|
||||
var response = await SendAsync(request, cancellationToken);
|
||||
@@ -66,8 +68,31 @@ public sealed class HttpSmsClient : ISmsClient, IDisposable
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
catch (JsonException)
|
||||
{
|
||||
return new ApiResponse
|
||||
{
|
||||
Command = request.Command,
|
||||
Success = false,
|
||||
ErrorMessage = $"Некорректный JSON в ответе (HTTP {(int)httpResponse.StatusCode}): {responseJson}",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private static GetMenuApiResponse ToGetMenuResponse(ApiResponse response) =>
|
||||
response as GetMenuApiResponse ?? new GetMenuApiResponse
|
||||
|
||||
@@ -31,6 +31,15 @@ public sealed class ApiController(ISmsApiService apiService) : ControllerBase
|
||||
ErrorMessage = $"Некорректный JSON: {ex.Message}",
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return Ok(new ApiResponse
|
||||
{
|
||||
Command = "",
|
||||
Success = false,
|
||||
ErrorMessage = ex.Message,
|
||||
});
|
||||
}
|
||||
|
||||
return Ok(apiService.Handle(request));
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ internal sealed class SmsApiService(IMenuStore store) : ISmsApiService
|
||||
return FailSendOrder("CommandParameters не указаны или имеют неверный формат.");
|
||||
}
|
||||
|
||||
var items = parameters.MenuItems
|
||||
var items = (parameters.MenuItems ?? [])
|
||||
.Select(item => (item.Id, item.Quantity))
|
||||
.ToList();
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"Default": "Host=localhost;Port=5432;Database=sms_task;Username=sms;Password=sms"
|
||||
},
|
||||
"ApiClient": {
|
||||
"Backend": "Grpc"
|
||||
"Backend": "Http"
|
||||
},
|
||||
"Http": {
|
||||
"BaseUrl": "http://localhost:5053",
|
||||
|
||||
@@ -2,12 +2,9 @@ using Domain.Entities;
|
||||
|
||||
namespace Contracts.Menu;
|
||||
|
||||
public sealed record GetMenuData(IReadOnlyList<Dish> MenuItems)
|
||||
public sealed record GetMenuData
|
||||
{
|
||||
public GetMenuData()
|
||||
: this([])
|
||||
{
|
||||
}
|
||||
public IReadOnlyList<Dish> MenuItems { get; init; } = [];
|
||||
|
||||
public override string ToString() =>
|
||||
string.Join(Environment.NewLine, MenuItems);
|
||||
|
||||
@@ -2,12 +2,11 @@ using Domain.Entities;
|
||||
|
||||
namespace Contracts.Orders;
|
||||
|
||||
public sealed record SendOrderParameters(string OrderId, IReadOnlyList<OrderItem> MenuItems)
|
||||
public sealed record SendOrderParameters
|
||||
{
|
||||
public SendOrderParameters(string OrderId)
|
||||
: this(OrderId, [])
|
||||
{
|
||||
}
|
||||
public required string OrderId { get; init; }
|
||||
|
||||
public IReadOnlyList<OrderItem> MenuItems { get; init; } = [];
|
||||
|
||||
public override string ToString() =>
|
||||
$"OrderId={OrderId}, Items=[{string.Join("; ", MenuItems)}]";
|
||||
|
||||
Reference in New Issue
Block a user