Files
Walleby/Wallet/ItemHandler.cs
T
TheXamlGuy 9daebc7ba2 Codemaid
2024-07-17 21:43:58 +01:00

55 lines
1.8 KiB
C#

using Microsoft.EntityFrameworkCore;
using System.Text.Json;
using Toolkit.Foundation;
using Wallet.Data;
namespace Wallet;
public class ItemHandler(IDbContextFactory<WalletContext> dbContextFactory) :
IHandler<RequestEventArgs<Item<Guid>>, (Guid, string, string?, string, ItemConfiguration?)>
{
public async Task<(Guid, string, string?, string, ItemConfiguration?)> Handle(RequestEventArgs<Item<Guid>> args,
CancellationToken cancellationToken)
{
if (args.Sender is Item<Guid> item)
{
Guid id = item.Value;
using WalletContext context = await dbContextFactory.CreateDbContextAsync(cancellationToken);
var result = await context.Set<ItemEntity>()
.Where(x => x.Id == id)
.Select(x => new
{
x.Id,
x.Name,
HasImage = x.ImageId != null,
x.Description,
x.Category,
Blob = x.Blobs
.Where(b => b.Type == 0)
.OrderByDescending(b => b.DateTime)
.FirstOrDefault()
})
.FirstOrDefaultAsync(cancellationToken);
if (result is not null)
{
ItemConfiguration? configuration = null;
if (result.Blob is BlobEntity blob && blob.Data is { Length: > 0 } data)
{
try
{
configuration = JsonSerializer.Deserialize<ItemConfiguration>(data);
}
catch
{
}
}
return (result.Id, result.Name, result.Description, result.Category, configuration);
}
}
return default;
}
}