1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-24 15:49: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:
Zach Gollwitzer 2024-07-01 10:49:43 -04:00 committed by GitHub
parent 320954282a
commit c3314e62d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
105 changed files with 2150 additions and 1576 deletions

View 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

View 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

View file

@ -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

View file

@ -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