using Microsoft.Extensions.Logging; using StellaOps.Microservice; namespace Examples.Inventory.Microservice.Endpoints; /// /// Request model for getting a single inventory item. /// public sealed record GetItemRequest { public required string Sku { get; init; } } /// /// Response model for a single inventory item with details. /// public sealed record GetItemResponse { public required string Sku { get; init; } public required string Name { get; init; } public required string Description { get; init; } public required string Category { get; init; } public required int QuantityOnHand { get; init; } public required int ReorderPoint { get; init; } public required decimal UnitPrice { get; init; } public required string Location { get; init; } public required DateTime LastUpdated { get; init; } } /// /// Endpoint for getting a single inventory item by SKU. /// Demonstrates path parameter extraction. /// [StellaEndpoint("GET", "/items/{sku}", TimeoutSeconds = 10)] public sealed class GetItemEndpoint : IStellaEndpoint { private readonly ILogger _logger; public GetItemEndpoint(ILogger logger) { _logger = logger; } public Task HandleAsync( GetItemRequest request, CancellationToken cancellationToken) { _logger.LogInformation("Fetching inventory item {Sku}", request.Sku); // Simulate item lookup return Task.FromResult(new GetItemResponse { Sku = request.Sku, Name = "Widget A", Description = "A high-quality widget for general purpose use", Category = "widgets", QuantityOnHand = 100, ReorderPoint = 25, UnitPrice = 9.99m, Location = "Warehouse A, Aisle 3, Shelf 2", LastUpdated = DateTime.UtcNow.AddHours(-2) }); } }