Улучшения, теперь работает 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
{
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

View File

@@ -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));
}

View File

@@ -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();

View File

@@ -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",

View File

@@ -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);

View File

@@ -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)}]";