using Asentrafin.Api.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace Asentrafin.Api.Data.Configurations; public class PlaidInvestmentTransactionConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("plaid_investment_transactions"); builder.HasKey(transaction => transaction.Id); builder.Property(transaction => transaction.PlaidInvestmentTransactionId).HasMaxLength(128).IsRequired(); builder.Property(transaction => transaction.AccountPlaidId).HasMaxLength(128).IsRequired(); builder.Property(transaction => transaction.SecurityPlaidId).HasMaxLength(128); builder.Property(transaction => transaction.Name).HasMaxLength(512).IsRequired(); builder.Property(transaction => transaction.Type).HasMaxLength(64); builder.Property(transaction => transaction.Subtype).HasMaxLength(64); builder.Property(transaction => transaction.IsoCurrencyCode).HasMaxLength(8); builder.Property(transaction => transaction.UnofficialCurrencyCode).HasMaxLength(32); builder.Property(transaction => transaction.RawJson).HasColumnType("jsonb"); builder.HasIndex(transaction => transaction.PlaidInvestmentTransactionId).IsUnique(); builder.HasIndex(transaction => new { transaction.PlaidItemId, transaction.Date }); builder.HasOne(transaction => transaction.PlaidItem) .WithMany(item => item.InvestmentTransactions) .HasForeignKey(transaction => transaction.PlaidItemId) .OnDelete(DeleteBehavior.Cascade); builder.HasOne(transaction => transaction.PlaidAccount) .WithMany(account => account.InvestmentTransactions) .HasForeignKey(transaction => transaction.PlaidAccountId) .OnDelete(DeleteBehavior.SetNull); builder.HasOne(transaction => transaction.PlaidSecurity) .WithMany(security => security.InvestmentTransactions) .HasForeignKey(transaction => transaction.PlaidSecurityId) .OnDelete(DeleteBehavior.SetNull); } }