More edge cases
This commit is contained in:
@@ -71,7 +71,8 @@ public partial class App : Application
|
|||||||
|
|
||||||
services.AddHandler<QueryContainerHandler>();
|
services.AddHandler<QueryContainerHandler>();
|
||||||
services.AddHandler<CreateItemHandler>();
|
services.AddHandler<CreateItemHandler>();
|
||||||
services.AddHandler<EditItemHander>();
|
services.AddHandler<UpdateItemHander>();
|
||||||
|
services.AddHandler<UpdateItemStateHandler>();
|
||||||
|
|
||||||
services.AddHandler<OpenContainerHandler>();
|
services.AddHandler<OpenContainerHandler>();
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
using Bitvault.Data;
|
using Toolkit.Foundation;
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Toolkit.Foundation;
|
|
||||||
|
|
||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public class ArchiveItemHandler(IValueStore<Item> valueStore,
|
public class ArchiveItemHandler(IValueStore<Item> valueStore,
|
||||||
IDbContextFactory<ContainerDbContext> dbContextFactory) :
|
ICache<Item> cache,
|
||||||
|
IMediator mediator) :
|
||||||
INotificationHandler<ArchiveEventArgs<Item>>
|
INotificationHandler<ArchiveEventArgs<Item>>
|
||||||
{
|
{
|
||||||
public async Task Handle(ArchiveEventArgs<Item> args)
|
public async Task Handle(ArchiveEventArgs<Item> args)
|
||||||
@@ -14,20 +13,18 @@ public class ArchiveItemHandler(IValueStore<Item> valueStore,
|
|||||||
{
|
{
|
||||||
if (valueStore.Value is Item item)
|
if (valueStore.Value is Item item)
|
||||||
{
|
{
|
||||||
await Task.Run(async () =>
|
if (cache.Contains(item))
|
||||||
{
|
{
|
||||||
using ContainerDbContext context = await dbContextFactory.CreateDbContextAsync();
|
await mediator.Handle<UpdateEventArgs<(Guid, int)>,
|
||||||
|
bool>(new UpdateEventArgs<(Guid, int)>((item.Id, 2)));
|
||||||
|
|
||||||
if (await context.FindAsync<ItemEntry>(item.Id) is ItemEntry result)
|
cache.Remove(item);
|
||||||
{
|
}
|
||||||
result.State = 2;
|
|
||||||
await context.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,7 @@ public class ConfirmItemHandler(IValueStore<Item> valueStore,
|
|||||||
|
|
||||||
valueStore.Set(newItem);
|
valueStore.Set(newItem);
|
||||||
|
|
||||||
await mediator.Handle<EditEventArgs<(Guid, ItemConfiguration)>, bool>(new EditEventArgs<(Guid,
|
await mediator.Handle<UpdateEventArgs<(Guid, ItemConfiguration)>, bool>(new UpdateEventArgs<(Guid,
|
||||||
ItemConfiguration)>((item.Id, new ItemConfiguration { Name = name })));
|
ItemConfiguration)>((item.Id, new ItemConfiguration { Name = name })));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ public partial class EditItemActionViewModel(IServiceProvider provider,
|
|||||||
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Edit.As<Item>());
|
public void Invoke() => Publisher.Publish(Update.As<Item>());
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
using Bitvault.Data;
|
using Toolkit.Foundation;
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Toolkit.Foundation;
|
|
||||||
|
|
||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public class FavouriteItemHandler(IValueStore<Item> valueStore,
|
public class FavouriteItemHandler(IValueStore<Item> valueStore,
|
||||||
IDbContextFactory<ContainerDbContext> dbContextFactory) :
|
IMediator mediator) :
|
||||||
INotificationHandler<FavouriteEventArgs<Item>>
|
INotificationHandler<FavouriteEventArgs<Item>>
|
||||||
{
|
{
|
||||||
public async Task Handle(FavouriteEventArgs<Item> args)
|
public async Task Handle(FavouriteEventArgs<Item> args)
|
||||||
@@ -14,16 +12,8 @@ public class FavouriteItemHandler(IValueStore<Item> valueStore,
|
|||||||
{
|
{
|
||||||
if (valueStore.Value is Item item)
|
if (valueStore.Value is Item item)
|
||||||
{
|
{
|
||||||
await Task.Run(async () =>
|
await mediator.Handle<UpdateEventArgs<(Guid, int)>, bool>(new UpdateEventArgs<(Guid,
|
||||||
{
|
int)>((item.Id, 1)));
|
||||||
using ContainerDbContext context = await dbContextFactory.CreateDbContextAsync();
|
|
||||||
|
|
||||||
if (await context.FindAsync<ItemEntry>(item.Id) is ItemEntry result)
|
|
||||||
{
|
|
||||||
result.State = 1;
|
|
||||||
await context.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
|||||||
@@ -2,5 +2,5 @@
|
|||||||
|
|
||||||
public record ItemConfiguration
|
public record ItemConfiguration
|
||||||
{
|
{
|
||||||
public string? Name { get; set; } = "";
|
public string Name { get; set; } = "";
|
||||||
}
|
}
|
||||||
@@ -2,5 +2,5 @@
|
|||||||
|
|
||||||
public record ItemHeaderConfiguration
|
public record ItemHeaderConfiguration
|
||||||
{
|
{
|
||||||
public string? Name { get; init; } = "";
|
public string Name { get; init; } = "";
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@ namespace Bitvault;
|
|||||||
public partial class ItemHeaderViewModel : Observable<string, string>,
|
public partial class ItemHeaderViewModel : Observable<string, string>,
|
||||||
IHandler<ValidationEventArgs<Item>, bool>,
|
IHandler<ValidationEventArgs<Item>, bool>,
|
||||||
IHandler<ConfirmEventArgs<Item>, ItemHeaderConfiguration>,
|
IHandler<ConfirmEventArgs<Item>, ItemHeaderConfiguration>,
|
||||||
INotificationHandler<EditEventArgs<Item>>,
|
INotificationHandler<UpdateEventArgs<Item>>,
|
||||||
INotificationHandler<ConfirmEventArgs<Item>>,
|
INotificationHandler<ConfirmEventArgs<Item>>,
|
||||||
INotificationHandler<CancelEventArgs<Item>>,
|
INotificationHandler<CancelEventArgs<Item>>,
|
||||||
IItemEntryViewModel
|
IItemEntryViewModel
|
||||||
@@ -38,7 +38,7 @@ public partial class ItemHeaderViewModel : Observable<string, string>,
|
|||||||
public Task<ItemHeaderConfiguration> Handle(ConfirmEventArgs<Item> args,
|
public Task<ItemHeaderConfiguration> Handle(ConfirmEventArgs<Item> args,
|
||||||
CancellationToken cancellationToken) => Task.FromResult(new ItemHeaderConfiguration { Name = Value });
|
CancellationToken cancellationToken) => Task.FromResult(new ItemHeaderConfiguration { Name = Value });
|
||||||
|
|
||||||
public Task Handle(EditEventArgs<Item> args) =>
|
public Task Handle(UpdateEventArgs<Item> args) =>
|
||||||
Task.FromResult(Immutable = false);
|
Task.FromResult(Immutable = false);
|
||||||
|
|
||||||
public Task Handle(CancelEventArgs<Item> args)
|
public Task Handle(CancelEventArgs<Item> args)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ namespace Bitvault;
|
|||||||
|
|
||||||
public partial class ItemViewModel :
|
public partial class ItemViewModel :
|
||||||
ObservableCollection<IItemEntryViewModel>,
|
ObservableCollection<IItemEntryViewModel>,
|
||||||
INotificationHandler<EditEventArgs<Item>>,
|
INotificationHandler<UpdateEventArgs<Item>>,
|
||||||
INotificationHandler<ConfirmEventArgs<Item>>,
|
INotificationHandler<ConfirmEventArgs<Item>>,
|
||||||
INotificationHandler<CancelEventArgs<Item>>
|
INotificationHandler<CancelEventArgs<Item>>
|
||||||
{
|
{
|
||||||
@@ -49,7 +49,7 @@ public partial class ItemViewModel :
|
|||||||
|
|
||||||
public IContentTemplate Template { get; set; }
|
public IContentTemplate Template { get; set; }
|
||||||
|
|
||||||
public Task Handle(EditEventArgs<Item> args)
|
public Task Handle(UpdateEventArgs<Item> args)
|
||||||
{
|
{
|
||||||
Publisher.Publish(Notify.As(Factory.Create<CommandCollection>(new List<IDisposable>
|
Publisher.Publish(Notify.As(Factory.Create<CommandCollection>(new List<IDisposable>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
using Bitvault.Data;
|
using Toolkit.Foundation;
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Toolkit.Foundation;
|
|
||||||
|
|
||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public class UnfavouriteItemHandler(IValueStore<Item> valueStore,
|
public class UnfavouriteItemHandler(IValueStore<Item> valueStore,
|
||||||
IDbContextFactory<ContainerDbContext> dbContextFactory) :
|
IMediator mediator) :
|
||||||
INotificationHandler<UnfavouriteEventArgs<Item>>
|
INotificationHandler<UnfavouriteEventArgs<Item>>
|
||||||
{
|
{
|
||||||
public async Task Handle(UnfavouriteEventArgs<Item> args)
|
public async Task Handle(UnfavouriteEventArgs<Item> args)
|
||||||
@@ -14,16 +11,8 @@ public class UnfavouriteItemHandler(IValueStore<Item> valueStore,
|
|||||||
{
|
{
|
||||||
if (valueStore.Value is Item item)
|
if (valueStore.Value is Item item)
|
||||||
{
|
{
|
||||||
await Task.Run(async () =>
|
await mediator.Handle<UpdateEventArgs<(Guid, int)>, bool>(new UpdateEventArgs<(Guid,
|
||||||
{
|
int)>((item.Id, 0)));
|
||||||
using ContainerDbContext context = await dbContextFactory.CreateDbContextAsync();
|
|
||||||
|
|
||||||
if (await context.FindAsync<ItemEntry>(item.Id) is ItemEntry result)
|
|
||||||
{
|
|
||||||
result.State = 0;
|
|
||||||
await context.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ using Toolkit.Foundation;
|
|||||||
|
|
||||||
namespace Bitvault;
|
namespace Bitvault;
|
||||||
|
|
||||||
public class EditItemHander(IDbContextFactory<ContainerDbContext> dbContextFactory) :
|
public class UpdateItemHander(IDbContextFactory<ContainerDbContext> dbContextFactory) :
|
||||||
IHandler<EditEventArgs<(Guid, ItemConfiguration)>, bool>
|
IHandler<UpdateEventArgs<(Guid, ItemConfiguration)>, bool>
|
||||||
{
|
{
|
||||||
public async Task<bool> Handle(EditEventArgs<(Guid, ItemConfiguration)> args,
|
public async Task<bool> Handle(UpdateEventArgs<(Guid, ItemConfiguration)> args,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
if (args.Value is (Guid id, ItemConfiguration configuration))
|
if (args.Value is (Guid id, ItemConfiguration configuration))
|
||||||
@@ -15,14 +15,12 @@ public class EditItemHander(IDbContextFactory<ContainerDbContext> dbContextFacto
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
string? name = configuration.Name;
|
string? name = configuration.Name;
|
||||||
|
|
||||||
using ContainerDbContext context = dbContextFactory.CreateDbContext();
|
using ContainerDbContext context = dbContextFactory.CreateDbContext();
|
||||||
ItemEntry? result = null;
|
ItemEntry? result = null;
|
||||||
|
|
||||||
await Task.Run(async () =>
|
await Task.Run(async () =>
|
||||||
{
|
{
|
||||||
result = await context.Set<ItemEntry>().FindAsync(id);
|
result = await context.Set<ItemEntry>().FindAsync(id);
|
||||||
|
|
||||||
if (result is not null)
|
if (result is not null)
|
||||||
{
|
{
|
||||||
result.Name = name;
|
result.Name = name;
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
using Bitvault.Data;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Toolkit.Foundation;
|
||||||
|
|
||||||
|
namespace Bitvault;
|
||||||
|
|
||||||
|
public class UpdateItemStateHandler(IDbContextFactory<ContainerDbContext> dbContextFactory) :
|
||||||
|
IHandler<UpdateEventArgs<(Guid, int)>, bool>
|
||||||
|
{
|
||||||
|
public async Task<bool> 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<ItemEntry>(id) is ItemEntry result)
|
||||||
|
{
|
||||||
|
result.State = state;
|
||||||
|
await context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user