feat(infra): added plaid specific metadata and updated context to model account

This commit is contained in:
Stevan Freeborn
2026-02-13 12:38:18 -06:00
parent 2fdb849142
commit a07fd24ee9
7 changed files with 597 additions and 1 deletions
+38
View File
@@ -1,3 +1,4 @@
using Account = FiscalOS.Core.Accounts.Account;
using Institution = FiscalOS.Core.Accounts.Institution;
namespace FiscalOS.Infra.Data;
@@ -65,6 +66,11 @@ public sealed class AppDbContext(
.WithOne()
.HasForeignKey(static i => i.UserId)
.OnDelete(DeleteBehavior.Cascade);
eb.HasMany(static u => u.Accounts)
.WithOne()
.HasForeignKey(static a => a.UserId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<RefreshToken>(static eb =>
@@ -104,5 +110,37 @@ public sealed class AppDbContext(
eb.Property(static m => m.PlaidName);
eb.Property(static m => m.EncryptedAccessToken);
});
modelBuilder.Entity<Account>(static eb =>
{
eb.Property(static a => a.Name);
eb.HasOne(static a => a.Institution)
.WithMany()
.HasForeignKey(static a => a.InstituionId)
.OnDelete(DeleteBehavior.Cascade);
eb.HasOne(static a => a.Metadata)
.WithOne()
.HasForeignKey<AccountMetadata>(static m => m.AccountId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<AccountMetadata>(static eb =>
{
eb.HasDiscriminator(static m => m.Type)
.HasValue<PlaidAccountMetadata>(PlaidAccountMetadata.TypeValue);
eb.Property(static m => m.AccountId);
eb.Property(static m => m.Type);
});
modelBuilder.Entity<PlaidAccountMetadata>(static eb =>
{
eb.HasBaseType<AccountMetadata>();
eb.Property(static m => m.PlaidId);
eb.Property(static m => m.PlaidName);
});
}
}