mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 07:39:39 +02:00
Account::Entry Delegated Type (namespace updates part 7) (#923)
* Initial entryable models * Update transfer and tests * Update transaction controllers and tests * Update sync process to use new entries model * Get dashboard working again * Update transfers, imports, and accounts to use Account::Entry * Update system tests * Consolidate transaction management into entries controller * Add permitted partial key helper * Move account transactions list to entries controller * Delegate transaction entries search * Move transfer relation to entry * Update bulk transaction management flows to use entries * Remove test code * Test fix attempt * Update demo data script * Consolidate remaining transaction partials to entries * Consolidate valuations controller to entries controller * Lint fix * Remove unused files, additional cleanup * Add back valuation creation * Make migrations fully reversible * Stale routes cleanup * Migrations reversible fix * Move types to entryable concern * Fix search when no entries found * Remove more unused code
This commit is contained in:
parent
320954282a
commit
c3314e62d1
105 changed files with 2150 additions and 1576 deletions
15
db/migrate/20240624160611_create_account_entries.rb
Normal file
15
db/migrate/20240624160611_create_account_entries.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
class CreateAccountEntries < ActiveRecord::Migration[7.2]
|
||||
def change
|
||||
create_table :account_entries, id: :uuid do |t|
|
||||
t.references :account, null: false, foreign_key: true, type: :uuid
|
||||
t.string :entryable_type
|
||||
t.uuid :entryable_id
|
||||
t.decimal :amount, precision: 19, scale: 4
|
||||
t.string :currency
|
||||
t.date :date
|
||||
t.string :name
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
28
db/migrate/20240624161153_migrate_entryables.rb
Normal file
28
db/migrate/20240624161153_migrate_entryables.rb
Normal file
|
@ -0,0 +1,28 @@
|
|||
class MigrateEntryables < ActiveRecord::Migration[7.2]
|
||||
def change
|
||||
reversible do |dir|
|
||||
dir.up do
|
||||
# Migrate Account::Transaction data
|
||||
execute <<-SQL.squish
|
||||
INSERT INTO account_entries (name, date, amount, currency, account_id, entryable_type, entryable_id, created_at, updated_at)
|
||||
SELECT name, date, amount, currency, account_id, 'Account::Transaction', id, created_at, updated_at
|
||||
FROM account_transactions
|
||||
SQL
|
||||
|
||||
# Migrate Account::Valuation data
|
||||
execute <<-SQL.squish
|
||||
INSERT INTO account_entries (name, date, amount, currency, account_id, entryable_type, entryable_id, created_at, updated_at)
|
||||
SELECT 'Manual valuation', date, value, currency, account_id, 'Account::Valuation', id, created_at, updated_at
|
||||
FROM account_valuations
|
||||
SQL
|
||||
end
|
||||
|
||||
dir.down do
|
||||
# Delete the entries from account_entries
|
||||
execute <<-SQL.squish
|
||||
DELETE FROM account_entries WHERE entryable_type IN ('Account::Transaction', 'Account::Valuation')
|
||||
SQL
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,58 @@
|
|||
class RemoveOldColumnsFromEntryables < ActiveRecord::Migration[7.2]
|
||||
def change
|
||||
reversible do |dir|
|
||||
dir.up do
|
||||
# Remove old columns from Account::Transaction
|
||||
remove_column :account_transactions, :name
|
||||
remove_column :account_transactions, :date
|
||||
remove_column :account_transactions, :amount
|
||||
remove_column :account_transactions, :currency
|
||||
remove_column :account_transactions, :account_id
|
||||
|
||||
# Remove old columns from Account::Valuation
|
||||
remove_column :account_valuations, :date
|
||||
remove_column :account_valuations, :value
|
||||
remove_column :account_valuations, :currency
|
||||
remove_column :account_valuations, :account_id
|
||||
end
|
||||
|
||||
dir.down do
|
||||
# Add old columns back to Account::Transaction
|
||||
add_column :account_transactions, :name, :string
|
||||
add_column :account_transactions, :date, :date
|
||||
add_column :account_transactions, :amount, :decimal, precision: 19, scale: 4
|
||||
add_column :account_transactions, :currency, :string
|
||||
add_column :account_transactions, :account_id, :uuid
|
||||
|
||||
# Add old columns back to Account::Valuation
|
||||
add_column :account_valuations, :date, :date
|
||||
add_column :account_valuations, :value, :decimal, precision: 19, scale: 4
|
||||
add_column :account_valuations, :currency, :string
|
||||
add_column :account_valuations, :account_id, :uuid
|
||||
|
||||
# Repopulate data for Account::Transaction
|
||||
execute <<-SQL.squish
|
||||
UPDATE account_transactions at
|
||||
SET name = ae.name,
|
||||
date = ae.date,
|
||||
amount = ae.amount,
|
||||
currency = ae.currency,
|
||||
account_id = ae.account_id
|
||||
FROM account_entries ae
|
||||
WHERE ae.entryable_type = 'Account::Transaction' AND ae.entryable_id = at.id
|
||||
SQL
|
||||
|
||||
# Repopulate data for Account::Valuation
|
||||
execute <<-SQL.squish
|
||||
UPDATE account_valuations av
|
||||
SET date = ae.date,
|
||||
value = ae.amount,
|
||||
currency = ae.currency,
|
||||
account_id = ae.account_id
|
||||
FROM account_entries ae
|
||||
WHERE ae.entryable_type = 'Account::Valuation' AND ae.entryable_id = av.id
|
||||
SQL
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,39 @@
|
|||
class MoveTransfersAssociationFromTransactionsToEntries < ActiveRecord::Migration[7.2]
|
||||
def change
|
||||
reversible do |dir|
|
||||
dir.up do
|
||||
add_reference :account_entries, :transfer, foreign_key: { to_table: :account_transfers }, type: :uuid
|
||||
add_column :account_entries, :marked_as_transfer, :boolean, default: false, null: false
|
||||
|
||||
execute <<-SQL.squish
|
||||
UPDATE account_entries
|
||||
SET transfer_id = transactions.transfer_id,
|
||||
marked_as_transfer = transactions.marked_as_transfer
|
||||
FROM account_transactions AS transactions
|
||||
WHERE account_entries.entryable_id = transactions.id
|
||||
AND account_entries.entryable_type = 'Account::Transaction'
|
||||
SQL
|
||||
|
||||
remove_reference :account_transactions, :transfer, foreign_key: { to_table: :account_transfers }, type: :uuid
|
||||
remove_column :account_transactions, :marked_as_transfer
|
||||
end
|
||||
|
||||
dir.down do
|
||||
add_reference :account_transactions, :transfer, foreign_key: { to_table: :account_transfers }, type: :uuid
|
||||
add_column :account_transactions, :marked_as_transfer, :boolean, default: false, null: false
|
||||
|
||||
execute <<-SQL.squish
|
||||
UPDATE account_transactions
|
||||
SET transfer_id = account_entries.transfer_id,
|
||||
marked_as_transfer = account_entries.marked_as_transfer
|
||||
FROM account_entries
|
||||
WHERE account_entries.entryable_id = account_transactions.id
|
||||
AND account_entries.entryable_type = 'Account::Transaction'
|
||||
SQL
|
||||
|
||||
remove_reference :account_entries, :transfer, foreign_key: { to_table: :account_transfers }, type: :uuid
|
||||
remove_column :account_entries, :marked_as_transfer
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
38
db/schema.rb
generated
38
db/schema.rb
generated
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.2].define(version: 2024_06_21_212528) do
|
||||
ActiveRecord::Schema[7.2].define(version: 2024_06_28_104551) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "pgcrypto"
|
||||
enable_extension "plpgsql"
|
||||
|
@ -32,24 +32,31 @@ ActiveRecord::Schema[7.2].define(version: 2024_06_21_212528) do
|
|||
t.index ["account_id"], name: "index_account_balances_on_account_id"
|
||||
end
|
||||
|
||||
create_table "account_transactions", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.date "date", null: false
|
||||
t.decimal "amount", precision: 19, scale: 4, null: false
|
||||
t.string "currency", default: "USD", null: false
|
||||
create_table "account_entries", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||
t.uuid "account_id", null: false
|
||||
t.string "entryable_type"
|
||||
t.uuid "entryable_id"
|
||||
t.decimal "amount", precision: 19, scale: 4
|
||||
t.string "currency"
|
||||
t.date "date"
|
||||
t.string "name"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.uuid "transfer_id"
|
||||
t.boolean "marked_as_transfer", default: false, null: false
|
||||
t.index ["account_id"], name: "index_account_entries_on_account_id"
|
||||
t.index ["transfer_id"], name: "index_account_entries_on_transfer_id"
|
||||
end
|
||||
|
||||
create_table "account_transactions", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.uuid "category_id"
|
||||
t.boolean "excluded", default: false
|
||||
t.text "notes"
|
||||
t.uuid "merchant_id"
|
||||
t.uuid "transfer_id"
|
||||
t.boolean "marked_as_transfer", default: false, null: false
|
||||
t.index ["account_id"], name: "index_account_transactions_on_account_id"
|
||||
t.index ["category_id"], name: "index_account_transactions_on_category_id"
|
||||
t.index ["merchant_id"], name: "index_account_transactions_on_merchant_id"
|
||||
t.index ["transfer_id"], name: "index_account_transactions_on_transfer_id"
|
||||
end
|
||||
|
||||
create_table "account_transfers", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||
|
@ -58,14 +65,8 @@ ActiveRecord::Schema[7.2].define(version: 2024_06_21_212528) do
|
|||
end
|
||||
|
||||
create_table "account_valuations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||
t.uuid "account_id", null: false
|
||||
t.date "date", null: false
|
||||
t.decimal "value", precision: 19, scale: 4, null: false
|
||||
t.string "currency", default: "USD", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["account_id", "date"], name: "index_account_valuations_on_account_id_and_date", unique: true
|
||||
t.index ["account_id"], name: "index_account_valuations_on_account_id"
|
||||
end
|
||||
|
||||
create_table "accounts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||
|
@ -352,11 +353,10 @@ ActiveRecord::Schema[7.2].define(version: 2024_06_21_212528) do
|
|||
end
|
||||
|
||||
add_foreign_key "account_balances", "accounts", on_delete: :cascade
|
||||
add_foreign_key "account_transactions", "account_transfers", column: "transfer_id"
|
||||
add_foreign_key "account_transactions", "accounts", on_delete: :cascade
|
||||
add_foreign_key "account_entries", "account_transfers", column: "transfer_id"
|
||||
add_foreign_key "account_entries", "accounts"
|
||||
add_foreign_key "account_transactions", "categories", on_delete: :nullify
|
||||
add_foreign_key "account_transactions", "merchants"
|
||||
add_foreign_key "account_valuations", "accounts", on_delete: :cascade
|
||||
add_foreign_key "accounts", "families"
|
||||
add_foreign_key "accounts", "institutions"
|
||||
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue