// Copyright (c) Microsoft. All rights reserved. using Microsoft.Agents.AI.Workflows; namespace SingleAgent; /// /// Parses an Order ID from a string input and returns an Order object populated. /// internal sealed class OrderLookup() : Executor("OrderLookup") { public override async ValueTask HandleAsync(string message, IWorkflowContext context, CancellationToken cancellationToken = default) { // Populate Order information from OrderId. return new Order(message, 100.0m); } } /// /// Enriches an Order object with additional information. /// internal sealed class OrderEnrich() : Executor("EnrichOrder") { public override async ValueTask HandleAsync(Order message, IWorkflowContext context, CancellationToken cancellationToken = default) { if (message.Customer is null) { // populate customer information for the order from database. message.Customer = new Customer(1, "Jerry"); } return message; } } internal sealed class PaymentProcessor() : Executor("ProcessPayment") { public override async ValueTask HandleAsync(Order message, IWorkflowContext context, CancellationToken cancellationToken = default) { message.PaymentReferenceNumber = Guid.NewGuid().ToString()[^4..]; return message; } } internal sealed class OrderCancel() : Executor("OrderCancel") { public override async ValueTask HandleAsync(Order message, IWorkflowContext context, CancellationToken cancellationToken = default) { return $"Order {message.Id} cancelled at {DateTime.UtcNow:g} UTC."; } } internal sealed class Order { public Order(string id, decimal amount) { this.Id = id; this.Amount = amount; } public string Id { get; } public decimal Amount { get; } public Customer? Customer { get; set; } public string? PaymentReferenceNumber { get; set; } } public sealed record Customer(int Id, string Name);