diff --git a/AAIntegration.SimmonsBank.API/Entities/Account.cs b/AAIntegration.SimmonsBank.API/Entities/Account.cs index 6035572..cf4bb8b 100644 --- a/AAIntegration.SimmonsBank.API/Entities/Account.cs +++ b/AAIntegration.SimmonsBank.API/Entities/Account.cs @@ -8,4 +8,5 @@ public class Account public string Name { get; set; } public decimal Balance { get; set; } public string ExternalAccountNumber { get; set; } + public User Owner { get; set; } } \ No newline at end of file diff --git a/AAIntegration.SimmonsBank.API/Entities/Transaction.cs b/AAIntegration.SimmonsBank.API/Entities/Transaction.cs index 6737bae..68f527b 100644 --- a/AAIntegration.SimmonsBank.API/Entities/Transaction.cs +++ b/AAIntegration.SimmonsBank.API/Entities/Transaction.cs @@ -15,4 +15,5 @@ public class Transaction public Account? CreditAccount { get; set; } public decimal Amount { get; set; } public bool IsPending { get; set; } + public User Owner { get; set; } } \ No newline at end of file diff --git a/AAIntegration.SimmonsBank.API/Migrations/20240320022712_UserOwnedEntities.Designer.cs b/AAIntegration.SimmonsBank.API/Migrations/20240320022712_UserOwnedEntities.Designer.cs new file mode 100644 index 0000000..2ce4c71 --- /dev/null +++ b/AAIntegration.SimmonsBank.API/Migrations/20240320022712_UserOwnedEntities.Designer.cs @@ -0,0 +1,173 @@ +// +using System; +using AAIntegration.SimmonsBank.API.Config; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace AAIntegration.SimmonsBank.API.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20240320022712_UserOwnedEntities")] + partial class UserOwnedEntities + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("AAIntegration.SimmonsBank.API.Entities.Account", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Balance") + .HasColumnType("numeric"); + + b.Property("ExternalAccountNumber") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("OwnerId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("OwnerId"); + + b.ToTable("Accounts"); + }); + + modelBuilder.Entity("AAIntegration.SimmonsBank.API.Entities.Transaction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasColumnType("numeric"); + + b.Property("CreatedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("CreditAccountId") + .HasColumnType("integer"); + + b.Property("Date") + .HasColumnType("timestamp with time zone"); + + b.Property("DebitAccountId") + .HasColumnType("integer"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text"); + + b.Property("ExternalId") + .IsRequired() + .HasColumnType("text"); + + b.Property("IsPending") + .HasColumnType("boolean"); + + b.Property("OwnerId") + .HasColumnType("integer"); + + b.Property("UpdatedOn") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("CreditAccountId"); + + b.HasIndex("DebitAccountId"); + + b.HasIndex("OwnerId"); + + b.ToTable("Transactions"); + }); + + modelBuilder.Entity("AAIntegration.SimmonsBank.API.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ApiKey") + .IsRequired() + .HasColumnType("text"); + + b.Property("MFAKey") + .IsRequired() + .HasColumnType("text"); + + b.Property("SimmonsBankPassword") + .IsRequired() + .HasColumnType("text"); + + b.Property("SimmonsBankUsername") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("AAIntegration.SimmonsBank.API.Entities.Account", b => + { + b.HasOne("AAIntegration.SimmonsBank.API.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("AAIntegration.SimmonsBank.API.Entities.Transaction", b => + { + b.HasOne("AAIntegration.SimmonsBank.API.Entities.Account", "CreditAccount") + .WithMany() + .HasForeignKey("CreditAccountId"); + + b.HasOne("AAIntegration.SimmonsBank.API.Entities.Account", "DebitAccount") + .WithMany() + .HasForeignKey("DebitAccountId"); + + b.HasOne("AAIntegration.SimmonsBank.API.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreditAccount"); + + b.Navigation("DebitAccount"); + + b.Navigation("Owner"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AAIntegration.SimmonsBank.API/Migrations/20240320022712_UserOwnedEntities.cs b/AAIntegration.SimmonsBank.API/Migrations/20240320022712_UserOwnedEntities.cs new file mode 100644 index 0000000..9e23922 --- /dev/null +++ b/AAIntegration.SimmonsBank.API/Migrations/20240320022712_UserOwnedEntities.cs @@ -0,0 +1,82 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace AAIntegration.SimmonsBank.API.Migrations +{ + /// + public partial class UserOwnedEntities : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "OwnerId", + table: "Transactions", + type: "integer", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "OwnerId", + table: "Accounts", + type: "integer", + nullable: false, + defaultValue: 0); + + migrationBuilder.CreateIndex( + name: "IX_Transactions_OwnerId", + table: "Transactions", + column: "OwnerId"); + + migrationBuilder.CreateIndex( + name: "IX_Accounts_OwnerId", + table: "Accounts", + column: "OwnerId"); + + migrationBuilder.AddForeignKey( + name: "FK_Accounts_Users_OwnerId", + table: "Accounts", + column: "OwnerId", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Transactions_Users_OwnerId", + table: "Transactions", + column: "OwnerId", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Accounts_Users_OwnerId", + table: "Accounts"); + + migrationBuilder.DropForeignKey( + name: "FK_Transactions_Users_OwnerId", + table: "Transactions"); + + migrationBuilder.DropIndex( + name: "IX_Transactions_OwnerId", + table: "Transactions"); + + migrationBuilder.DropIndex( + name: "IX_Accounts_OwnerId", + table: "Accounts"); + + migrationBuilder.DropColumn( + name: "OwnerId", + table: "Transactions"); + + migrationBuilder.DropColumn( + name: "OwnerId", + table: "Accounts"); + } + } +} diff --git a/AAIntegration.SimmonsBank.API/Migrations/DataContextModelSnapshot.cs b/AAIntegration.SimmonsBank.API/Migrations/DataContextModelSnapshot.cs index a3f869c..cfe2c20 100644 --- a/AAIntegration.SimmonsBank.API/Migrations/DataContextModelSnapshot.cs +++ b/AAIntegration.SimmonsBank.API/Migrations/DataContextModelSnapshot.cs @@ -41,8 +41,13 @@ namespace AAIntegration.SimmonsBank.API.Migrations .IsRequired() .HasColumnType("text"); + b.Property("OwnerId") + .HasColumnType("integer"); + b.HasKey("Id"); + b.HasIndex("OwnerId"); + b.ToTable("Accounts"); }); @@ -80,6 +85,9 @@ namespace AAIntegration.SimmonsBank.API.Migrations b.Property("IsPending") .HasColumnType("boolean"); + b.Property("OwnerId") + .HasColumnType("integer"); + b.Property("UpdatedOn") .HasColumnType("timestamp with time zone"); @@ -89,6 +97,8 @@ namespace AAIntegration.SimmonsBank.API.Migrations b.HasIndex("DebitAccountId"); + b.HasIndex("OwnerId"); + b.ToTable("Transactions"); }); @@ -121,6 +131,17 @@ namespace AAIntegration.SimmonsBank.API.Migrations b.ToTable("Users"); }); + modelBuilder.Entity("AAIntegration.SimmonsBank.API.Entities.Account", b => + { + b.HasOne("AAIntegration.SimmonsBank.API.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Owner"); + }); + modelBuilder.Entity("AAIntegration.SimmonsBank.API.Entities.Transaction", b => { b.HasOne("AAIntegration.SimmonsBank.API.Entities.Account", "CreditAccount") @@ -131,9 +152,17 @@ namespace AAIntegration.SimmonsBank.API.Migrations .WithMany() .HasForeignKey("DebitAccountId"); + b.HasOne("AAIntegration.SimmonsBank.API.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + b.Navigation("CreditAccount"); b.Navigation("DebitAccount"); + + b.Navigation("Owner"); }); #pragma warning restore 612, 618 }