37 lines
2.0 KiB
C#
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);
|
|
}
|
|
}
|