using Books.Api.Domain.Orders; using EventFlow.Commands; namespace Books.Api.Commands.Orders; public class CreateOrderCommandHandler : CommandHandler { public override Task ExecuteAsync( OrderAggregate aggregate, CreateOrderCommand command, CancellationToken cancellationToken) { aggregate.Create( command.CompanyId, command.FiscalYearId, command.CustomerId, command.CustomerName, command.CustomerNumber, command.OrderNumber, command.OrderDate, command.ExpectedDeliveryDate, command.Currency, command.VatCode, command.Notes, command.Reference, command.CreatedBy); return Task.CompletedTask; } } public class AddOrderLineCommandHandler : CommandHandler { public override Task ExecuteAsync( OrderAggregate aggregate, AddOrderLineCommand command, CancellationToken cancellationToken) { aggregate.AddLine( command.Description, command.Quantity, command.UnitPrice, command.VatCode, command.AccountId, command.Unit, command.DiscountPercent, command.ProductId); return Task.CompletedTask; } } public class UpdateOrderLineCommandHandler : CommandHandler { public override Task ExecuteAsync( OrderAggregate aggregate, UpdateOrderLineCommand command, CancellationToken cancellationToken) { aggregate.UpdateLine( command.LineNumber, command.Description, command.Quantity, command.UnitPrice, command.VatCode, command.AccountId, command.Unit, command.DiscountPercent, command.ProductId); return Task.CompletedTask; } } public class RemoveOrderLineCommandHandler : CommandHandler { public override Task ExecuteAsync( OrderAggregate aggregate, RemoveOrderLineCommand command, CancellationToken cancellationToken) { aggregate.RemoveLine(command.LineNumber); return Task.CompletedTask; } } public class ConfirmOrderCommandHandler : CommandHandler { public override Task ExecuteAsync( OrderAggregate aggregate, ConfirmOrderCommand command, CancellationToken cancellationToken) { aggregate.Confirm(command.ConfirmedBy); return Task.CompletedTask; } } public class MarkOrderLinesInvoicedCommandHandler : CommandHandler { public override Task ExecuteAsync( OrderAggregate aggregate, MarkOrderLinesInvoicedCommand command, CancellationToken cancellationToken) { aggregate.MarkLinesAsInvoiced( command.InvoiceId, command.InvoiceNumber, command.LineNumbers, command.InvoicedBy); return Task.CompletedTask; } } public class CancelOrderCommandHandler : CommandHandler { public override Task ExecuteAsync( OrderAggregate aggregate, CancelOrderCommand command, CancellationToken cancellationToken) { aggregate.Cancel(command.Reason, command.CancelledBy); return Task.CompletedTask; } }