Add initial EF Core migration
Creates all database tables: users, accounts, transactions, categories, payees, budgets, scheduled_transactions, loans, investments, reconciliations, plugins, and import batches. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,800 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Purrse.Data.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class InitialCreate : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "plugin_registrations",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
PluginId = table.Column<string>(type: "character varying(200)", maxLength: 200, nullable: false),
|
||||
Name = table.Column<string>(type: "character varying(200)", maxLength: 200, nullable: false),
|
||||
Version = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: false),
|
||||
EntryAssembly = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: false),
|
||||
EntryType = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: false),
|
||||
IsEnabled = table.Column<bool>(type: "boolean", nullable: false),
|
||||
InstalledAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_plugin_registrations", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "securities",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Symbol = table.Column<string>(type: "character varying(20)", maxLength: 20, nullable: false),
|
||||
Name = table.Column<string>(type: "character varying(200)", maxLength: 200, nullable: false),
|
||||
SecurityType = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_securities", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "users",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Username = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: false),
|
||||
Email = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
|
||||
PasswordHash = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
|
||||
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
LastLoginAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
|
||||
RefreshToken = table.Column<string>(type: "text", nullable: true),
|
||||
RefreshTokenExpiresAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_users", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "plugin_configurations",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
PluginRegistrationId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Key = table.Column<string>(type: "character varying(200)", maxLength: 200, nullable: false),
|
||||
Value = table.Column<string>(type: "character varying(2000)", maxLength: 2000, nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_plugin_configurations", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_plugin_configurations_plugin_registrations_PluginRegistrati~",
|
||||
column: x => x.PluginRegistrationId,
|
||||
principalTable: "plugin_registrations",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "security_prices",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
SecurityId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Date = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
Price = table.Column<decimal>(type: "numeric(18,4)", precision: 18, scale: 4, nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_security_prices", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_security_prices_securities_SecurityId",
|
||||
column: x => x.SecurityId,
|
||||
principalTable: "securities",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "accounts",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
UserId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Name = table.Column<string>(type: "character varying(200)", maxLength: 200, nullable: false),
|
||||
Type = table.Column<int>(type: "integer", nullable: false),
|
||||
Institution = table.Column<string>(type: "character varying(200)", maxLength: 200, nullable: true),
|
||||
AccountNumber = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: true),
|
||||
Balance = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
CreditLimit = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: true),
|
||||
InterestRate = table.Column<decimal>(type: "numeric(8,4)", precision: 8, scale: 4, nullable: true),
|
||||
IsActive = table.Column<bool>(type: "boolean", nullable: false),
|
||||
IsClosed = table.Column<bool>(type: "boolean", nullable: false),
|
||||
Notes = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: true),
|
||||
SortOrder = table.Column<int>(type: "integer", nullable: false),
|
||||
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_accounts", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_accounts_users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "users",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "budgets",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
UserId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Year = table.Column<int>(type: "integer", nullable: false),
|
||||
Month = table.Column<int>(type: "integer", nullable: false),
|
||||
Notes = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true),
|
||||
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_budgets", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_budgets_users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "users",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "categories",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
UserId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Name = table.Column<string>(type: "character varying(200)", maxLength: 200, nullable: false),
|
||||
Type = table.Column<int>(type: "integer", nullable: false),
|
||||
ParentId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
SortOrder = table.Column<int>(type: "integer", nullable: false),
|
||||
IsSystem = table.Column<bool>(type: "boolean", nullable: false),
|
||||
IsActive = table.Column<bool>(type: "boolean", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_categories", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_categories_categories_ParentId",
|
||||
column: x => x.ParentId,
|
||||
principalTable: "categories",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
table.ForeignKey(
|
||||
name: "FK_categories_users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "users",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "import_batches",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
UserId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
FileName = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: false),
|
||||
FileType = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: false),
|
||||
TotalCount = table.Column<int>(type: "integer", nullable: false),
|
||||
ImportedCount = table.Column<int>(type: "integer", nullable: false),
|
||||
DuplicateCount = table.Column<int>(type: "integer", nullable: false),
|
||||
SkippedCount = table.Column<int>(type: "integer", nullable: false),
|
||||
Status = table.Column<int>(type: "integer", nullable: false),
|
||||
ImportedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_import_batches", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_import_batches_accounts_AccountId",
|
||||
column: x => x.AccountId,
|
||||
principalTable: "accounts",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_import_batches_users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "users",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "investment_holdings",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
SecurityId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Shares = table.Column<decimal>(type: "numeric(18,6)", precision: 18, scale: 6, nullable: false),
|
||||
CostBasis = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
AsOfDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_investment_holdings", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_investment_holdings_accounts_AccountId",
|
||||
column: x => x.AccountId,
|
||||
principalTable: "accounts",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_investment_holdings_securities_SecurityId",
|
||||
column: x => x.SecurityId,
|
||||
principalTable: "securities",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "loan_details",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
OriginalBalance = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
InterestRate = table.Column<decimal>(type: "numeric(8,4)", precision: 8, scale: 4, nullable: false),
|
||||
TermMonths = table.Column<int>(type: "integer", nullable: false),
|
||||
MonthlyPayment = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
OriginationDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
MaturityDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
EscrowAmount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: true),
|
||||
ExtraPayment = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_loan_details", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_loan_details_accounts_AccountId",
|
||||
column: x => x.AccountId,
|
||||
principalTable: "accounts",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "reconciliations",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
StatementDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
StatementBalance = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
IsCompleted = table.Column<bool>(type: "boolean", nullable: false),
|
||||
CompletedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
|
||||
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_reconciliations", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_reconciliations_accounts_AccountId",
|
||||
column: x => x.AccountId,
|
||||
principalTable: "accounts",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "budget_items",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
BudgetId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
CategoryId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
BudgetedAmount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_budget_items", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_budget_items_budgets_BudgetId",
|
||||
column: x => x.BudgetId,
|
||||
principalTable: "budgets",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_budget_items_categories_CategoryId",
|
||||
column: x => x.CategoryId,
|
||||
principalTable: "categories",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "payees",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
UserId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Name = table.Column<string>(type: "character varying(300)", maxLength: 300, nullable: false),
|
||||
DefaultCategoryId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
IsActive = table.Column<bool>(type: "boolean", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_payees", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_payees_categories_DefaultCategoryId",
|
||||
column: x => x.DefaultCategoryId,
|
||||
principalTable: "categories",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
table.ForeignKey(
|
||||
name: "FK_payees_users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "users",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "amortization_entries",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
LoanDetailId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
PaymentNumber = table.Column<int>(type: "integer", nullable: false),
|
||||
PaymentDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
PaymentAmount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
PrincipalAmount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
InterestAmount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
EscrowAmount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: true),
|
||||
RemainingBalance = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_amortization_entries", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_amortization_entries_loan_details_LoanDetailId",
|
||||
column: x => x.LoanDetailId,
|
||||
principalTable: "loan_details",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "payee_aliases",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
PayeeId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Alias = table.Column<string>(type: "character varying(300)", maxLength: 300, nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_payee_aliases", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_payee_aliases_payees_PayeeId",
|
||||
column: x => x.PayeeId,
|
||||
principalTable: "payees",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "scheduled_transactions",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
UserId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Amount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
PayeeName = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true),
|
||||
PayeeId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
CategoryId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
Memo = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: true),
|
||||
Type = table.Column<int>(type: "integer", nullable: false),
|
||||
Frequency = table.Column<int>(type: "integer", nullable: false),
|
||||
NextDueDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
EndDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
|
||||
AutoPost = table.Column<bool>(type: "boolean", nullable: false),
|
||||
ReminderDaysBefore = table.Column<int>(type: "integer", nullable: false),
|
||||
IsActive = table.Column<bool>(type: "boolean", nullable: false),
|
||||
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_scheduled_transactions", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_scheduled_transactions_accounts_AccountId",
|
||||
column: x => x.AccountId,
|
||||
principalTable: "accounts",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_scheduled_transactions_categories_CategoryId",
|
||||
column: x => x.CategoryId,
|
||||
principalTable: "categories",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
table.ForeignKey(
|
||||
name: "FK_scheduled_transactions_payees_PayeeId",
|
||||
column: x => x.PayeeId,
|
||||
principalTable: "payees",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
table.ForeignKey(
|
||||
name: "FK_scheduled_transactions_users_UserId",
|
||||
column: x => x.UserId,
|
||||
principalTable: "users",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "transactions",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
AccountId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
Date = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
Amount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
PayeeId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
PayeeName = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true),
|
||||
CategoryId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
Memo = table.Column<string>(type: "character varying(1000)", maxLength: 1000, nullable: true),
|
||||
ReferenceNumber = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: true),
|
||||
CheckNumber = table.Column<string>(type: "character varying(20)", maxLength: 20, nullable: true),
|
||||
Type = table.Column<int>(type: "integer", nullable: false),
|
||||
Status = table.Column<int>(type: "integer", nullable: false),
|
||||
FitId = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
||||
Fingerprint = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
|
||||
TransferTransactionId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
ImportBatchId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
ReconciliationId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
IsVoid = table.Column<bool>(type: "boolean", nullable: false),
|
||||
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
||||
UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_transactions", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_transactions_accounts_AccountId",
|
||||
column: x => x.AccountId,
|
||||
principalTable: "accounts",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_transactions_categories_CategoryId",
|
||||
column: x => x.CategoryId,
|
||||
principalTable: "categories",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
table.ForeignKey(
|
||||
name: "FK_transactions_import_batches_ImportBatchId",
|
||||
column: x => x.ImportBatchId,
|
||||
principalTable: "import_batches",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
table.ForeignKey(
|
||||
name: "FK_transactions_payees_PayeeId",
|
||||
column: x => x.PayeeId,
|
||||
principalTable: "payees",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
table.ForeignKey(
|
||||
name: "FK_transactions_reconciliations_ReconciliationId",
|
||||
column: x => x.ReconciliationId,
|
||||
principalTable: "reconciliations",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
table.ForeignKey(
|
||||
name: "FK_transactions_transactions_TransferTransactionId",
|
||||
column: x => x.TransferTransactionId,
|
||||
principalTable: "transactions",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "transaction_splits",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
TransactionId = table.Column<Guid>(type: "uuid", nullable: false),
|
||||
CategoryId = table.Column<Guid>(type: "uuid", nullable: true),
|
||||
Amount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||
Memo = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_transaction_splits", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_transaction_splits_categories_CategoryId",
|
||||
column: x => x.CategoryId,
|
||||
principalTable: "categories",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.SetNull);
|
||||
table.ForeignKey(
|
||||
name: "FK_transaction_splits_transactions_TransactionId",
|
||||
column: x => x.TransactionId,
|
||||
principalTable: "transactions",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_accounts_UserId",
|
||||
table: "accounts",
|
||||
column: "UserId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_amortization_entries_LoanDetailId",
|
||||
table: "amortization_entries",
|
||||
column: "LoanDetailId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_budget_items_BudgetId",
|
||||
table: "budget_items",
|
||||
column: "BudgetId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_budget_items_CategoryId",
|
||||
table: "budget_items",
|
||||
column: "CategoryId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_budgets_UserId_Year_Month",
|
||||
table: "budgets",
|
||||
columns: new[] { "UserId", "Year", "Month" },
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_categories_ParentId",
|
||||
table: "categories",
|
||||
column: "ParentId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_categories_UserId_Name_ParentId",
|
||||
table: "categories",
|
||||
columns: new[] { "UserId", "Name", "ParentId" },
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_import_batches_AccountId",
|
||||
table: "import_batches",
|
||||
column: "AccountId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_import_batches_UserId",
|
||||
table: "import_batches",
|
||||
column: "UserId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_investment_holdings_AccountId",
|
||||
table: "investment_holdings",
|
||||
column: "AccountId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_investment_holdings_SecurityId",
|
||||
table: "investment_holdings",
|
||||
column: "SecurityId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_loan_details_AccountId",
|
||||
table: "loan_details",
|
||||
column: "AccountId",
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_payee_aliases_Alias",
|
||||
table: "payee_aliases",
|
||||
column: "Alias");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_payee_aliases_PayeeId",
|
||||
table: "payee_aliases",
|
||||
column: "PayeeId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_payees_DefaultCategoryId",
|
||||
table: "payees",
|
||||
column: "DefaultCategoryId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_payees_UserId_Name",
|
||||
table: "payees",
|
||||
columns: new[] { "UserId", "Name" },
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_plugin_configurations_PluginRegistrationId_Key",
|
||||
table: "plugin_configurations",
|
||||
columns: new[] { "PluginRegistrationId", "Key" },
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_plugin_registrations_PluginId",
|
||||
table: "plugin_registrations",
|
||||
column: "PluginId",
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_reconciliations_AccountId",
|
||||
table: "reconciliations",
|
||||
column: "AccountId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_scheduled_transactions_AccountId",
|
||||
table: "scheduled_transactions",
|
||||
column: "AccountId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_scheduled_transactions_CategoryId",
|
||||
table: "scheduled_transactions",
|
||||
column: "CategoryId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_scheduled_transactions_PayeeId",
|
||||
table: "scheduled_transactions",
|
||||
column: "PayeeId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_scheduled_transactions_UserId",
|
||||
table: "scheduled_transactions",
|
||||
column: "UserId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_securities_Symbol",
|
||||
table: "securities",
|
||||
column: "Symbol",
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_security_prices_SecurityId_Date",
|
||||
table: "security_prices",
|
||||
columns: new[] { "SecurityId", "Date" },
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transaction_splits_CategoryId",
|
||||
table: "transaction_splits",
|
||||
column: "CategoryId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transaction_splits_TransactionId",
|
||||
table: "transaction_splits",
|
||||
column: "TransactionId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_AccountId",
|
||||
table: "transactions",
|
||||
column: "AccountId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_CategoryId",
|
||||
table: "transactions",
|
||||
column: "CategoryId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_Date",
|
||||
table: "transactions",
|
||||
column: "Date");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_Fingerprint",
|
||||
table: "transactions",
|
||||
column: "Fingerprint");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_FitId",
|
||||
table: "transactions",
|
||||
column: "FitId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_ImportBatchId",
|
||||
table: "transactions",
|
||||
column: "ImportBatchId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_PayeeId",
|
||||
table: "transactions",
|
||||
column: "PayeeId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_ReconciliationId",
|
||||
table: "transactions",
|
||||
column: "ReconciliationId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_transactions_TransferTransactionId",
|
||||
table: "transactions",
|
||||
column: "TransferTransactionId",
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_users_Email",
|
||||
table: "users",
|
||||
column: "Email",
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_users_Username",
|
||||
table: "users",
|
||||
column: "Username",
|
||||
unique: true);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "amortization_entries");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "budget_items");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "investment_holdings");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "payee_aliases");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "plugin_configurations");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "scheduled_transactions");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "security_prices");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "transaction_splits");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "loan_details");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "budgets");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "plugin_registrations");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "securities");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "transactions");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "import_batches");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "payees");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "reconciliations");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "categories");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "accounts");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "users");
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user