From 195e316da519de9afc859702b4894e79e2f7d145 Mon Sep 17 00:00:00 2001 From: myrmidex Date: Mon, 4 May 2026 21:54:51 +0200 Subject: [PATCH] 31+32 - Fix entries migration: nullable unit_price/total_cost, consolidate rename migration into source --- ...25_07_10_150549_create_purchases_table.php | 33 ------------ ...2026_05_02_000002_create_entries_table.php | 30 +++++++++++ ...2_000002_refactor_purchases_to_entries.php | 50 ------------------- 3 files changed, 30 insertions(+), 83 deletions(-) delete mode 100644 database/migrations/2025_07_10_150549_create_purchases_table.php create mode 100644 database/migrations/2026_05_02_000002_create_entries_table.php delete mode 100644 database/migrations/2026_05_02_000002_refactor_purchases_to_entries.php diff --git a/database/migrations/2025_07_10_150549_create_purchases_table.php b/database/migrations/2025_07_10_150549_create_purchases_table.php deleted file mode 100644 index edfc344..0000000 --- a/database/migrations/2025_07_10_150549_create_purchases_table.php +++ /dev/null @@ -1,33 +0,0 @@ -id(); - $table->date('date'); - $table->decimal('shares', 12, 6); // Supports fractional shares - $table->decimal('price_per_share', 8, 4); // Price in euros - $table->decimal('total_cost', 12, 2); // Total cost in euros - $table->timestamps(); - - $table->index('date'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('purchases'); - } -}; diff --git a/database/migrations/2026_05_02_000002_create_entries_table.php b/database/migrations/2026_05_02_000002_create_entries_table.php new file mode 100644 index 0000000..b6fbec3 --- /dev/null +++ b/database/migrations/2026_05_02_000002_create_entries_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignId('tracker_id')->constrained()->cascadeOnDelete(); + $table->date('date'); + $table->decimal('quantity', 12, 6); + $table->decimal('unit_price', 12, 4)->nullable(); + $table->decimal('total_cost', 12, 2)->nullable(); + $table->timestamps(); + + $table->index(['tracker_id', 'date']); + }); + } + + public function down(): void + { + Schema::dropIfExists('entries'); + } +}; diff --git a/database/migrations/2026_05_02_000002_refactor_purchases_to_entries.php b/database/migrations/2026_05_02_000002_refactor_purchases_to_entries.php deleted file mode 100644 index 66a3163..0000000 --- a/database/migrations/2026_05_02_000002_refactor_purchases_to_entries.php +++ /dev/null @@ -1,50 +0,0 @@ -renameColumn('shares', 'quantity'); - $table->renameColumn('price_per_share', 'unit_price'); - - // Add tracker_id FK (nullable first so we can backfill) - $table->foreignId('tracker_id')->nullable()->after('id')->constrained()->cascadeOnDelete(); - }); - - // Backfill tracker_id: assign all entries to the first tracker (single-user app) - $trackerId = DB::table('trackers')->value('id'); - if ($trackerId) { - DB::table('entries')->update(['tracker_id' => $trackerId]); - } - - // Make tracker_id non-nullable now that it's backfilled - Schema::table('entries', function (Blueprint $table) { - $table->unsignedBigInteger('tracker_id')->nullable(false)->change(); - }); - } - - public function down(): void - { - Schema::table('entries', function (Blueprint $table) { - $table->dropForeign(['tracker_id']); - $table->dropColumn('tracker_id'); - }); - - Schema::table('entries', function (Blueprint $table) { - $table->renameColumn('unit_price', 'price_per_share'); - $table->renameColumn('quantity', 'shares'); - }); - - Schema::rename('entries', 'purchases'); - } -};