Улучшения, теперь работает http и grpc
Но ещё требуется ревью и чистка
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)}]";
|
||||||
|
|||||||
Reference in New Issue
Block a user