kitchen-service/src/Kitchen.Service.Grpc/Program.cs

73 lines
2.9 KiB
C#

using Kitchen.Service.Application.Ports;
using Kitchen.Service.Application.UseCases;
using Kitchen.Service.Contracts.Requests;
using Kitchen.Service.Grpc.Adapters;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient<IKitchenWorkItemStorePort, KitchenDalWorkItemStoreClient>(client =>
{
var baseUrl = builder.Configuration["KitchenDal:BaseUrl"] ?? "http://kitchen-dal:8080";
client.BaseAddress = new Uri(baseUrl);
});
builder.Services.AddHttpClient<IRestaurantLifecycleSyncPort, OperationsDalRestaurantLifecycleSyncClient>(client =>
{
var baseUrl = builder.Configuration["OperationsDal:BaseUrl"] ?? "http://operations-dal:8080";
client.BaseAddress = new Uri(baseUrl);
});
builder.Services.AddSingleton<IKitchenQueueReadPort>(sp =>
new DefaultKitchenQueueReadPort(sp.GetRequiredService<IKitchenWorkItemStorePort>()));
builder.Services.AddSingleton<IKitchenWorkflowPort>(sp =>
new DefaultKitchenWorkflowPort(
sp.GetRequiredService<IKitchenWorkItemStorePort>(),
sp.GetRequiredService<IRestaurantLifecycleSyncPort>()));
builder.Services.AddSingleton<IGetKitchenQueueUseCase, GetKitchenQueueUseCase>();
builder.Services.AddSingleton<ITransitionKitchenOrderStateUseCase, TransitionKitchenOrderStateUseCase>();
builder.Services.AddSingleton<IGetKitchenBoardUseCase, GetKitchenBoardUseCase>();
builder.Services.AddSingleton<IClaimKitchenWorkItemUseCase, ClaimKitchenWorkItemUseCase>();
builder.Services.AddSingleton<IUpdateKitchenPriorityUseCase, UpdateKitchenPriorityUseCase>();
var app = builder.Build();
app.MapGet("/internal/kitchen/queue", async (string queueName, int? limit, IGetKitchenQueueUseCase useCase, CancellationToken ct) =>
{
var request = new GetKitchenQueueRequest(queueName, limit ?? 20);
return Results.Ok(await useCase.HandleAsync(request, ct));
});
app.MapPost("/internal/kitchen/orders/transition", async (
TransitionKitchenOrderStateRequest request,
ITransitionKitchenOrderStateUseCase useCase,
CancellationToken ct) =>
{
return Results.Ok(await useCase.HandleAsync(request, ct));
});
app.MapGet("/internal/kitchen/board", async (
string contextId,
IGetKitchenBoardUseCase useCase,
CancellationToken ct) =>
{
return Results.Ok(await useCase.HandleAsync(new GetKitchenBoardRequest(contextId), ct));
});
app.MapPost("/internal/kitchen/work-items/claim", async (
ClaimKitchenWorkItemRequest request,
IClaimKitchenWorkItemUseCase useCase,
CancellationToken ct) =>
{
return Results.Ok(await useCase.HandleAsync(request, ct));
});
app.MapPost("/internal/kitchen/work-items/priority", async (
UpdateKitchenPriorityRequest request,
IUpdateKitchenPriorityUseCase useCase,
CancellationToken ct) =>
{
return Results.Ok(await useCase.HandleAsync(request, ct));
});
app.MapGet("/health", () => Results.Ok(new { status = "ok", service = "kitchen-service" }));
app.MapGet("/healthz", () => Results.Ok(new { status = "ok", service = "kitchen-service" }));
app.Run();