asentrafin/backend/Data/Configurations/PlaidInvestmentTransactionC...

40 lines
2.2 KiB
C#

using Asentrafin.Api.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Asentrafin.Api.Data.Configurations;
public class PlaidInvestmentTransactionConfiguration : IEntityTypeConfiguration<PlaidInvestmentTransaction>
{
public void Configure(EntityTypeBuilder<PlaidInvestmentTransaction> 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);
}
}