using Toolkit.Foundation; namespace Bitvault; public class ConfirmItemHandler(IValueStore valueStore, IMediator mediator, IPublisher publisher) : INotificationHandler> { public async Task Handle(ConfirmEventArgs args) { ItemHeaderConfiguration? configuration = await mediator.Handle, ItemHeaderConfiguration>(args); if (configuration is not null) { bool success = false; if (valueStore?.Value is Item item) { (bool Success, int Id, string Name) = await mediator.Handle, (bool, int, string)>(new EditEventArgs<(int, ItemConfiguration)>((item.Id, new ItemConfiguration { Name = configuration.Name }))); if (Success) { Item newItem = new() { Id = Id, Name = Name }; publisher.Publish(Modified.As(item, newItem)); valueStore.Set(newItem); success = true; } } else { (bool Success, int Id, string Name) = await mediator.Handle, (bool, int, string)>(new CreateEventArgs(new ItemConfiguration { Name = configuration.Name })); if (Success) { publisher.Publish(Created.As(new Item { Id = Id, Name = Name })); success = true; } } if (success) { publisher.Publish(Notify.As(configuration)); } } } }