From 840d8fb679d9f4d710389d4ba33d901a875cfccb Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Tue, 2 Jul 2024 11:49:57 +0100 Subject: [PATCH] Fixed item creation when there is no image attached --- Wallet.Data/ItemEntry.cs | 2 + Wallet.Data/LockerContext.cs | 9 +++-- Wallet/ConfirmCreateItemHandler.cs | 2 +- Wallet/CreateItemHandler.cs | 64 +++++++++++++++--------------- 4 files changed, 39 insertions(+), 38 deletions(-) diff --git a/Wallet.Data/ItemEntry.cs b/Wallet.Data/ItemEntry.cs index 39a989f..38eeec9 100644 --- a/Wallet.Data/ItemEntry.cs +++ b/Wallet.Data/ItemEntry.cs @@ -15,6 +15,8 @@ public record ItemEntry public int State { get; set; } = 0; + public Guid? ImageId { get; set; } + public BlobEntry? Image { get; set; } public required string Category { get; set; } diff --git a/Wallet.Data/LockerContext.cs b/Wallet.Data/LockerContext.cs index dbe78ed..3c53193 100644 --- a/Wallet.Data/LockerContext.cs +++ b/Wallet.Data/LockerContext.cs @@ -31,11 +31,12 @@ public class WalletContext(DbContextOptions options) : .WithOne() .OnDelete(DeleteBehavior.Cascade); - modelBuilder.Entity() - .HasOne(x => x.Image) + modelBuilder.Entity(). + HasOne(i => i.Image) .WithOne() - .HasForeignKey() - .IsRequired(false); + .HasForeignKey(i => i.ImageId) + .IsRequired(false) + .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasKey(x => x.Id); diff --git a/Wallet/ConfirmCreateItemHandler.cs b/Wallet/ConfirmCreateItemHandler.cs index 1052481..917f698 100644 --- a/Wallet/ConfirmCreateItemHandler.cs +++ b/Wallet/ConfirmCreateItemHandler.cs @@ -24,7 +24,7 @@ public class ConfirmCreateItemHandler(IMediator mediator, await mediator.Handle, bool>(new CreateEventArgs<(Guid, string, string, IImageDescriptor?, - ItemConfiguration)>((id, name, category, imageDescriptor, itemConfiguration))); + ItemConfiguration)>((id, name, category, imageDescriptor ?? default, itemConfiguration))); publisher.Publish(Changed.As()); } diff --git a/Wallet/CreateItemHandler.cs b/Wallet/CreateItemHandler.cs index ffff391..b8a77eb 100644 --- a/Wallet/CreateItemHandler.cs +++ b/Wallet/CreateItemHandler.cs @@ -14,34 +14,33 @@ public class CreateItemHandler(IImageWriter imageWriter, public async Task Handle(CreateEventArgs<(Guid, string, string, IImageDescriptor?, ItemConfiguration)> args, CancellationToken cancellationToken) { - if (args.Sender is (Guid id, string name, string category, IImageDescriptor imageDescriptor, ItemConfiguration configuration)) + (Guid id, string name, string category, IImageDescriptor? imageDescriptor, ItemConfiguration configuration) = args.Sender; + try { - try + string content = JsonSerializer.Serialize(configuration); + byte[]? thumbData = null; + + if (imageDescriptor is not null) { - string content = JsonSerializer.Serialize(configuration); - byte[]? thumbData = null; + using MemoryStream memoryStream = new(); + imageWriter.Write(imageDescriptor, memoryStream); + thumbData = memoryStream.ToArray(); + } - if (imageDescriptor is not null) + ItemEntry itemEntry = new() + { + Id = id, + Name = name, + Category = category, + Image = thumbData != null ? new BlobEntry { - using MemoryStream memoryStream = new MemoryStream(); - imageWriter.Write(imageDescriptor, memoryStream); - thumbData = memoryStream.ToArray(); - } - - ItemEntry itemEntry = new() - { - Id = id, - Name = name, - Category = category, - Image = thumbData != null ? new BlobEntry + Id = Guid.NewGuid(), + Data = thumbData, + DateTime = DateTime.UtcNow, + Type = 1 + } : null, + Blobs = { - Id = Guid.NewGuid(), - Data = thumbData, - DateTime = DateTime.UtcNow, - Type = 1 - } : null, - Blobs = - { new BlobEntry { Id = Guid.NewGuid(), @@ -50,22 +49,21 @@ public class CreateItemHandler(IImageWriter imageWriter, Type = 0 } } - }; + }; - using WalletContext context = await dbContextFactory.CreateDbContextAsync(cancellationToken); - EntityEntry? result = await context.AddAsync(itemEntry, cancellationToken); + using WalletContext context = await dbContextFactory.CreateDbContextAsync(cancellationToken); + EntityEntry? result = await context.AddAsync(itemEntry, cancellationToken); - await context.SaveChangesAsync(cancellationToken); + await context.SaveChangesAsync(cancellationToken); - if (result is not null) - { - return true; - } - } - catch + if (result is not null) { + return true; } } + catch + { + } return false; }