diff --git a/Bitvault.Avalonia/App.axaml.cs b/Bitvault.Avalonia/App.axaml.cs index 4b0a441..338d14f 100644 --- a/Bitvault.Avalonia/App.axaml.cs +++ b/Bitvault.Avalonia/App.axaml.cs @@ -71,7 +71,8 @@ public partial class App : Application services.AddHandler(); services.AddHandler(); - services.AddHandler(); + services.AddHandler(); + services.AddHandler(); services.AddHandler(); diff --git a/Bitvault/ArchiveItemHandler.cs b/Bitvault/ArchiveItemHandler.cs index e11684d..dd887be 100644 --- a/Bitvault/ArchiveItemHandler.cs +++ b/Bitvault/ArchiveItemHandler.cs @@ -1,11 +1,10 @@ -using Bitvault.Data; -using Microsoft.EntityFrameworkCore; -using Toolkit.Foundation; +using Toolkit.Foundation; namespace Bitvault; public class ArchiveItemHandler(IValueStore valueStore, - IDbContextFactory dbContextFactory) : + ICache cache, + IMediator mediator) : INotificationHandler> { public async Task Handle(ArchiveEventArgs args) @@ -14,20 +13,18 @@ public class ArchiveItemHandler(IValueStore valueStore, { if (valueStore.Value is Item item) { - await Task.Run(async () => + if (cache.Contains(item)) { - using ContainerDbContext context = await dbContextFactory.CreateDbContextAsync(); + await mediator.Handle, + bool>(new UpdateEventArgs<(Guid, int)>((item.Id, 2))); - if (await context.FindAsync(item.Id) is ItemEntry result) - { - result.State = 2; - await context.SaveChangesAsync(); - } - }); - } + cache.Remove(item); + } + } } catch { + } } } \ No newline at end of file diff --git a/Bitvault/ConfirmItemHandler.cs b/Bitvault/ConfirmItemHandler.cs index 6c69549..6ec368c 100644 --- a/Bitvault/ConfirmItemHandler.cs +++ b/Bitvault/ConfirmItemHandler.cs @@ -26,7 +26,7 @@ public class ConfirmItemHandler(IValueStore valueStore, valueStore.Set(newItem); - await mediator.Handle, bool>(new EditEventArgs<(Guid, + await mediator.Handle, bool>(new UpdateEventArgs<(Guid, ItemConfiguration)>((item.Id, new ItemConfiguration { Name = name }))); } else diff --git a/Bitvault/EditItemActionViewModel.cs b/Bitvault/EditItemActionViewModel.cs index cd45e1c..0145451 100644 --- a/Bitvault/EditItemActionViewModel.cs +++ b/Bitvault/EditItemActionViewModel.cs @@ -11,5 +11,5 @@ public partial class EditItemActionViewModel(IServiceProvider provider, IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer) { [RelayCommand] - public void Invoke() => Publisher.Publish(Edit.As()); + public void Invoke() => Publisher.Publish(Update.As()); } \ No newline at end of file diff --git a/Bitvault/FavouriteItemHandler.cs b/Bitvault/FavouriteItemHandler.cs index fdfb45b..d53ac0e 100644 --- a/Bitvault/FavouriteItemHandler.cs +++ b/Bitvault/FavouriteItemHandler.cs @@ -1,11 +1,9 @@ -using Bitvault.Data; -using Microsoft.EntityFrameworkCore; -using Toolkit.Foundation; +using Toolkit.Foundation; namespace Bitvault; public class FavouriteItemHandler(IValueStore valueStore, - IDbContextFactory dbContextFactory) : + IMediator mediator) : INotificationHandler> { public async Task Handle(FavouriteEventArgs args) @@ -14,16 +12,8 @@ public class FavouriteItemHandler(IValueStore valueStore, { if (valueStore.Value is Item item) { - await Task.Run(async () => - { - using ContainerDbContext context = await dbContextFactory.CreateDbContextAsync(); - - if (await context.FindAsync(item.Id) is ItemEntry result) - { - result.State = 1; - await context.SaveChangesAsync(); - } - }); + await mediator.Handle, bool>(new UpdateEventArgs<(Guid, + int)>((item.Id, 1))); } } catch diff --git a/Bitvault/ItemConfiguration.cs b/Bitvault/ItemConfiguration.cs index d84a596..ea47068 100644 --- a/Bitvault/ItemConfiguration.cs +++ b/Bitvault/ItemConfiguration.cs @@ -2,5 +2,5 @@ public record ItemConfiguration { - public string? Name { get; set; } = ""; + public string Name { get; set; } = ""; } \ No newline at end of file diff --git a/Bitvault/ItemHeaderConfiguration.cs b/Bitvault/ItemHeaderConfiguration.cs index 87903b6..634cb0d 100644 --- a/Bitvault/ItemHeaderConfiguration.cs +++ b/Bitvault/ItemHeaderConfiguration.cs @@ -2,5 +2,5 @@ public record ItemHeaderConfiguration { - public string? Name { get; init; } = ""; + public string Name { get; init; } = ""; } \ No newline at end of file diff --git a/Bitvault/ItemHeaderViewModel.cs b/Bitvault/ItemHeaderViewModel.cs index 455efaa..c283ce0 100644 --- a/Bitvault/ItemHeaderViewModel.cs +++ b/Bitvault/ItemHeaderViewModel.cs @@ -6,7 +6,7 @@ namespace Bitvault; public partial class ItemHeaderViewModel : Observable, IHandler, bool>, IHandler, ItemHeaderConfiguration>, - INotificationHandler>, + INotificationHandler>, INotificationHandler>, INotificationHandler>, IItemEntryViewModel @@ -38,7 +38,7 @@ public partial class ItemHeaderViewModel : Observable, public Task Handle(ConfirmEventArgs args, CancellationToken cancellationToken) => Task.FromResult(new ItemHeaderConfiguration { Name = Value }); - public Task Handle(EditEventArgs args) => + public Task Handle(UpdateEventArgs args) => Task.FromResult(Immutable = false); public Task Handle(CancelEventArgs args) diff --git a/Bitvault/ItemViewModel.cs b/Bitvault/ItemViewModel.cs index 4288991..183e5df 100644 --- a/Bitvault/ItemViewModel.cs +++ b/Bitvault/ItemViewModel.cs @@ -5,7 +5,7 @@ namespace Bitvault; public partial class ItemViewModel : ObservableCollection, - INotificationHandler>, + INotificationHandler>, INotificationHandler>, INotificationHandler> { @@ -49,7 +49,7 @@ public partial class ItemViewModel : public IContentTemplate Template { get; set; } - public Task Handle(EditEventArgs args) + public Task Handle(UpdateEventArgs args) { Publisher.Publish(Notify.As(Factory.Create(new List { diff --git a/Bitvault/UnfavouriteItemHandler.cs b/Bitvault/UnfavouriteItemHandler.cs index c1d5c14..24c4e63 100644 --- a/Bitvault/UnfavouriteItemHandler.cs +++ b/Bitvault/UnfavouriteItemHandler.cs @@ -1,11 +1,8 @@ -using Bitvault.Data; -using Microsoft.EntityFrameworkCore; -using Toolkit.Foundation; +using Toolkit.Foundation; namespace Bitvault; - public class UnfavouriteItemHandler(IValueStore valueStore, - IDbContextFactory dbContextFactory) : + IMediator mediator) : INotificationHandler> { public async Task Handle(UnfavouriteEventArgs args) @@ -14,16 +11,8 @@ public class UnfavouriteItemHandler(IValueStore valueStore, { if (valueStore.Value is Item item) { - await Task.Run(async () => - { - using ContainerDbContext context = await dbContextFactory.CreateDbContextAsync(); - - if (await context.FindAsync(item.Id) is ItemEntry result) - { - result.State = 0; - await context.SaveChangesAsync(); - } - }); + await mediator.Handle, bool>(new UpdateEventArgs<(Guid, + int)>((item.Id, 0))); } } catch diff --git a/Bitvault/EditItemHander.cs b/Bitvault/UpdateItemHander.cs similarity index 81% rename from Bitvault/EditItemHander.cs rename to Bitvault/UpdateItemHander.cs index fcb2896..d9e364a 100644 --- a/Bitvault/EditItemHander.cs +++ b/Bitvault/UpdateItemHander.cs @@ -4,10 +4,10 @@ using Toolkit.Foundation; namespace Bitvault; -public class EditItemHander(IDbContextFactory dbContextFactory) : - IHandler, bool> +public class UpdateItemHander(IDbContextFactory dbContextFactory) : + IHandler, bool> { - public async Task Handle(EditEventArgs<(Guid, ItemConfiguration)> args, + public async Task Handle(UpdateEventArgs<(Guid, ItemConfiguration)> args, CancellationToken cancellationToken) { if (args.Value is (Guid id, ItemConfiguration configuration)) @@ -15,14 +15,12 @@ public class EditItemHander(IDbContextFactory dbContextFacto try { string? name = configuration.Name; - using ContainerDbContext context = dbContextFactory.CreateDbContext(); ItemEntry? result = null; await Task.Run(async () => { result = await context.Set().FindAsync(id); - if (result is not null) { result.Name = name; diff --git a/Bitvault/UpdateItemStateHandler.cs b/Bitvault/UpdateItemStateHandler.cs new file mode 100644 index 0000000..77db1d7 --- /dev/null +++ b/Bitvault/UpdateItemStateHandler.cs @@ -0,0 +1,28 @@ +using Bitvault.Data; +using Microsoft.EntityFrameworkCore; +using Toolkit.Foundation; + +namespace Bitvault; + +public class UpdateItemStateHandler(IDbContextFactory dbContextFactory) : + IHandler, bool> +{ + public async Task Handle(UpdateEventArgs<(Guid, int)> args, + CancellationToken cancellationToken) + { + if (args.Value is (Guid id, int state)) + { + await Task.Run(async () => + { + using ContainerDbContext context = await dbContextFactory.CreateDbContextAsync(); + if (await context.FindAsync(id) is ItemEntry result) + { + result.State = state; + await context.SaveChangesAsync(); + } + }, cancellationToken); + } + + return false; + } +}