using Microsoft.EntityFrameworkCore; using System.Text.Json; using Toolkit.Foundation; using Wallet.Data; namespace Wallet; public class ItemHandler(IDbContextFactory dbContextFactory) : IHandler>, (Guid, string, string?, string, ItemConfiguration?)> { public async Task<(Guid, string, string?, string, ItemConfiguration?)> Handle(RequestEventArgs> args, CancellationToken cancellationToken) { if (args.Sender is Item item) { Guid id = item.Value; using WalletContext context = await dbContextFactory.CreateDbContextAsync(cancellationToken); var result = await context.Set() .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(data); } catch { } } return (result.Id, result.Name, result.Description, result.Category, configuration); } } return default; } }