73 lines
2.9 KiB
C#
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();
|