fd3602fa28
Build and Push Docker Image / build-and-push (push) Failing after 12m11s
- 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.
135 lines
5.7 KiB
C#
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();
|
|
});
|
|
}
|
|
}
|