Files
BirthList/src/BirthList.Infrastructure/Persistence/RegistryDbContext.cs
T
Arne Moerman fd3602fa28
Build and Push Docker Image / build-and-push (push) Failing after 12m11s
Add UserActionLog and enhance registry features
- Introduced `UserActionLog` entity to track user actions.
- Replaced `CanBeSecondHand` with `PreferSecondHand` property.
- Added `ShowBankAccountName` to `RegistrySettings`.
- Updated models and migrations for new properties.
- Enhanced `RegistryService` with user action logging and item details.
- Redesigned `Home.razor` with a grid layout and modal for registries.
- Added `RegistryActionLog.razor` for admin action logs.
- Improved `RegistryPublic.razor` with purchaser/contributor details.
- Replaced sidebar with `TopBar.razor` for responsive navigation.
- Updated CSS for new components and improved responsiveness.
2026-05-17 20:57:54 +02:00

135 lines
5.7 KiB
C#

using BirthList.Domain.Entities;
using Microsoft.EntityFrameworkCore;
namespace BirthList.Infrastructure.Persistence;
public class RegistryDbContext(DbContextOptions<RegistryDbContext> options) : DbContext(options)
{
public DbSet<Registry> Registries => Set<Registry>();
public DbSet<RegistryAdmin> RegistryAdmins => Set<RegistryAdmin>();
public DbSet<RegistryAdminInvite> RegistryAdminInvites => Set<RegistryAdminInvite>();
public DbSet<RegistrySettings> RegistrySettings => Set<RegistrySettings>();
public DbSet<RegistryItem> RegistryItems => Set<RegistryItem>();
public DbSet<ItemPurchase> ItemPurchases => Set<ItemPurchase>();
public DbSet<ItemContribution> ItemContributions => Set<ItemContribution>();
public DbSet<RegistryVisit> RegistryVisits => Set<RegistryVisit>();
public DbSet<UserActionLog> UserActionLogs => Set<UserActionLog>();
public DbSet<PlatformOwner> PlatformOwners => Set<PlatformOwner>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Registry>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.Title).HasMaxLength(250);
entity.Property(x => x.PublicLinkCode).HasMaxLength(100);
entity.HasIndex(x => x.PublicLinkCode).IsUnique();
entity.Property(x => x.BabyName).HasMaxLength(100);
entity.Property(x => x.CurrencyCode).HasMaxLength(3);
entity.Property(x => x.ThemeKey).HasMaxLength(100);
});
modelBuilder.Entity<RegistryAdmin>(entity =>
{
entity.HasKey(x => new { x.RegistryId, x.UserId });
entity.Property(x => x.UserId).HasMaxLength(450);
entity.HasOne(x => x.Registry)
.WithMany(x => x.Admins)
.HasForeignKey(x => x.RegistryId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<RegistryAdminInvite>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.Token).HasMaxLength(120);
entity.HasIndex(x => x.Token).IsUnique();
entity.Property(x => x.SentToEmail).HasMaxLength(320);
entity.HasOne(x => x.Registry)
.WithMany(x => x.AdminInvites)
.HasForeignKey(x => x.RegistryId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<RegistrySettings>(entity =>
{
entity.HasKey(x => x.RegistryId);
entity.Property(x => x.BankAccountIban).HasMaxLength(34);
entity.Property(x => x.BankAccountBic).HasMaxLength(11);
entity.Property(x => x.BankAccountDisplayName).HasMaxLength(120);
entity.HasOne(x => x.Registry)
.WithOne()
.HasForeignKey<RegistrySettings>(x => x.RegistryId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<RegistryItem>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.Name).HasMaxLength(300);
entity.Property(x => x.PictureUrl).HasMaxLength(2048);
entity.Property(x => x.ProductUrl).HasMaxLength(2048);
entity.Property(x => x.CurrencyCode).HasMaxLength(3);
entity.Property(x => x.PriceAmount).HasPrecision(18, 2);
entity.Property(x => x.ParticipationTargetAmount).HasPrecision(18, 2);
entity.Property(x => x.MoneyFulfilledAmount).HasPrecision(18, 2);
entity.HasOne(x => x.Registry)
.WithMany(x => x.Items)
.HasForeignKey(x => x.RegistryId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<ItemPurchase>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.UserId).HasMaxLength(450);
entity.HasOne(x => x.RegistryItem)
.WithMany(x => x.Purchases)
.HasForeignKey(x => x.RegistryItemId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<ItemContribution>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.UserId).HasMaxLength(450);
entity.Property(x => x.CurrencyCode).HasMaxLength(3);
entity.Property(x => x.Amount).HasPrecision(18, 2);
entity.Property(x => x.TransferMessage).HasMaxLength(500);
entity.HasOne(x => x.RegistryItem)
.WithMany(x => x.Contributions)
.HasForeignKey(x => x.RegistryItemId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<RegistryVisit>(entity =>
{
entity.HasKey(x => new { x.RegistryId, x.UserId });
entity.Property(x => x.UserId).HasMaxLength(450);
entity.HasOne(x => x.Registry)
.WithMany(x => x.Visits)
.HasForeignKey(x => x.RegistryId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<UserActionLog>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.UserId).HasMaxLength(450);
entity.Property(x => x.Amount).HasPrecision(18, 2);
entity.Property(x => x.Details).HasMaxLength(500);
entity.HasOne(x => x.Registry)
.WithMany(x => x.ActionLogs)
.HasForeignKey(x => x.RegistryId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<PlatformOwner>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.UserId).HasMaxLength(450);
entity.HasIndex(x => x.UserId).IsUnique();
});
}
}