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(client => { var baseUrl = builder.Configuration["KitchenDal:BaseUrl"] ?? "http://kitchen-dal:8080"; client.BaseAddress = new Uri(baseUrl); }); builder.Services.AddHttpClient(client => { var baseUrl = builder.Configuration["OperationsDal:BaseUrl"] ?? "http://operations-dal:8080"; client.BaseAddress = new Uri(baseUrl); }); builder.Services.AddSingleton(sp => new DefaultKitchenQueueReadPort(sp.GetRequiredService())); builder.Services.AddSingleton(sp => new DefaultKitchenWorkflowPort( sp.GetRequiredService(), sp.GetRequiredService())); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); 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();