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