asentrafin/backend/Data/Configurations/PlaidTransactionConfigurati...

37 lines
2.0 KiB
C#

using Asentrafin.Api.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Asentrafin.Api.Data.Configurations;
public class PlaidTransactionConfiguration : IEntityTypeConfiguration<PlaidTransaction>
{
public void Configure(EntityTypeBuilder<PlaidTransaction> builder)
{
builder.ToTable("plaid_transactions");
builder.HasKey(transaction => transaction.Id);
builder.Property(transaction => transaction.PlaidTransactionId).HasMaxLength(128).IsRequired();
builder.Property(transaction => transaction.AccountPlaidId).HasMaxLength(128).IsRequired();
builder.Property(transaction => transaction.Name).HasMaxLength(512).IsRequired();
builder.Property(transaction => transaction.MerchantName).HasMaxLength(256);
builder.Property(transaction => transaction.IsoCurrencyCode).HasMaxLength(8);
builder.Property(transaction => transaction.UnofficialCurrencyCode).HasMaxLength(32);
builder.Property(transaction => transaction.PersonalFinanceCategoryPrimary).HasMaxLength(128);
builder.Property(transaction => transaction.PersonalFinanceCategoryDetailed).HasMaxLength(128);
builder.Property(transaction => transaction.Categories).HasColumnType("text[]");
builder.Property(transaction => transaction.RawJson).HasColumnType("jsonb");
builder.HasIndex(transaction => transaction.PlaidTransactionId).IsUnique();
builder.HasIndex(transaction => new { transaction.PlaidItemId, transaction.Date });
builder.HasOne(transaction => transaction.PlaidItem)
.WithMany(item => item.Transactions)
.HasForeignKey(transaction => transaction.PlaidItemId)
.OnDelete(DeleteBehavior.Cascade);
builder.HasOne(transaction => transaction.PlaidAccount)
.WithMany(account => account.Transactions)
.HasForeignKey(transaction => transaction.PlaidAccountId)
.OnDelete(DeleteBehavior.SetNull);
}
}