diff --git a/internal/database/migrations/20260603104618_update_farm_depreciation_manual_inputs.down.sql b/internal/database/migrations/20260603104618_update_farm_depreciation_manual_inputs.down.sql deleted file mode 100644 index e69de29b..00000000 diff --git a/internal/database/migrations/20260531213223_add_project_flock_id_to_house_depreciation_standards.down.sql b/internal/database/migrations/20260604041616_add_project_flock_id_to_house_depreciation_standards.down.sql similarity index 100% rename from internal/database/migrations/20260531213223_add_project_flock_id_to_house_depreciation_standards.down.sql rename to internal/database/migrations/20260604041616_add_project_flock_id_to_house_depreciation_standards.down.sql diff --git a/internal/database/migrations/20260531213223_add_project_flock_id_to_house_depreciation_standards.up.sql b/internal/database/migrations/20260604041616_add_project_flock_id_to_house_depreciation_standards.up.sql similarity index 100% rename from internal/database/migrations/20260531213223_add_project_flock_id_to_house_depreciation_standards.up.sql rename to internal/database/migrations/20260604041616_add_project_flock_id_to_house_depreciation_standards.up.sql diff --git a/internal/database/migrations/20260604041658_update_farm_depreciation_manual_inputs.down.sql b/internal/database/migrations/20260604041658_update_farm_depreciation_manual_inputs.down.sql new file mode 100644 index 00000000..48e4ff1a --- /dev/null +++ b/internal/database/migrations/20260604041658_update_farm_depreciation_manual_inputs.down.sql @@ -0,0 +1,14 @@ +-- Reverse UPSERT: hapus baris PFK 47 & 48 yang kemungkinan baru diinsert oleh up migration ini. +-- Jika sebelumnya sudah ada (ON CONFLICT DO UPDATE), baris ini akan terhapus — +-- restore manual dari backup jika diperlukan. +DELETE FROM farm_depreciation_manual_inputs +WHERE project_flock_id IN (47, 48); + +-- UPDATE rows untuk PFK 4–27 tidak bisa di-reverse secara presisi: +-- nilai total_cost sebelum migration ini tidak tersimpan di migration history +-- (data awal di-load via cmd/import-farm-depreciation-manual-inputs dari Excel). +-- PFK 10 dan 11 tidak berubah (nilai sama dengan state dari migration 20260529144559). +-- Jika perlu rollback penuh: restore dari database backup atau re-import Excel lama. + +-- Recompute snapshots setelah rollback +TRUNCATE TABLE farm_depreciation_snapshots; diff --git a/internal/database/migrations/20260603104618_update_farm_depreciation_manual_inputs.up.sql b/internal/database/migrations/20260604041658_update_farm_depreciation_manual_inputs.up.sql similarity index 100% rename from internal/database/migrations/20260603104618_update_farm_depreciation_manual_inputs.up.sql rename to internal/database/migrations/20260604041658_update_farm_depreciation_manual_inputs.up.sql diff --git a/internal/database/migrations/20260604041743_fix_hds_custom_unique_per_flock.down.sql b/internal/database/migrations/20260604041743_fix_hds_custom_unique_per_flock.down.sql new file mode 100644 index 00000000..dd4dface --- /dev/null +++ b/internal/database/migrations/20260604041743_fix_hds_custom_unique_per_flock.down.sql @@ -0,0 +1,8 @@ +DROP INDEX IF EXISTS idx_hds_custom_unique; + +-- Remove all per-flock custom curves; they must be re-seeded after rolling back. +DELETE FROM house_depreciation_standards WHERE project_flock_ids IS NOT NULL; + +CREATE UNIQUE INDEX idx_hds_custom_unique + ON house_depreciation_standards (house_type, day, effective_date) + WHERE project_flock_ids IS NOT NULL; diff --git a/internal/database/migrations/20260604041743_fix_hds_custom_unique_per_flock.up.sql b/internal/database/migrations/20260604041743_fix_hds_custom_unique_per_flock.up.sql new file mode 100644 index 00000000..c0310ceb --- /dev/null +++ b/internal/database/migrations/20260604041743_fix_hds_custom_unique_per_flock.up.sql @@ -0,0 +1,10 @@ +-- Allow multiple custom depreciation curves per (house_type, day, effective_date) +-- for different flock groups. Previously idx_hds_custom_unique only keyed on +-- (house_type, day, effective_date), so separate curves for different project_flock_ids +-- arrays on the same date were blocked. + +DROP INDEX IF EXISTS idx_hds_custom_unique; + +CREATE UNIQUE INDEX idx_hds_custom_unique + ON house_depreciation_standards (house_type, day, effective_date, project_flock_ids) + WHERE project_flock_ids IS NOT NULL; diff --git a/internal/database/migrations/20260603173610_seed_house_depreciation_flocks_8_13_17.down.sql b/internal/database/migrations/20260604041941_seed_house_depreciation_flocks_8_13_17.down.sql similarity index 100% rename from internal/database/migrations/20260603173610_seed_house_depreciation_flocks_8_13_17.down.sql rename to internal/database/migrations/20260604041941_seed_house_depreciation_flocks_8_13_17.down.sql diff --git a/internal/database/migrations/20260603173610_seed_house_depreciation_flocks_8_13_17.up.sql b/internal/database/migrations/20260604041941_seed_house_depreciation_flocks_8_13_17.up.sql similarity index 97% rename from internal/database/migrations/20260603173610_seed_house_depreciation_flocks_8_13_17.up.sql rename to internal/database/migrations/20260604041941_seed_house_depreciation_flocks_8_13_17.up.sql index 5c4a5ec4..6af1fd3b 100644 --- a/internal/database/migrations/20260603173610_seed_house_depreciation_flocks_8_13_17.up.sql +++ b/internal/database/migrations/20260604041941_seed_house_depreciation_flocks_8_13_17.up.sql @@ -3,6 +3,12 @@ -- depreciation_percent diturunkan = (1 - multiplication_percentage) * 100. -- Lookup engine: ? = ANY(project_flock_ids) — satu baris dipakai semua flock. +-- Hapus custom curve untuk array ini agar INSERT idempoten. +DELETE FROM house_depreciation_standards +WHERE project_flock_ids = ARRAY[8,13,17]::bigint[] + AND house_type = 'open_house'::house_type_enum + AND effective_date = DATE '2026-06-03'; + INSERT INTO house_depreciation_standards (project_flock_ids, house_type, day, effective_date, multiplication_percentage, depreciation_percent, standard_week, name) diff --git a/internal/database/migrations/20260603181020_seed_house_depreciation_flocks_18.down.sql b/internal/database/migrations/20260604042051_seed_house_depreciation_flocks_18.down.sql similarity index 100% rename from internal/database/migrations/20260603181020_seed_house_depreciation_flocks_18.down.sql rename to internal/database/migrations/20260604042051_seed_house_depreciation_flocks_18.down.sql diff --git a/internal/database/migrations/20260603181020_seed_house_depreciation_flocks_18.up.sql b/internal/database/migrations/20260604042051_seed_house_depreciation_flocks_18.up.sql similarity index 97% rename from internal/database/migrations/20260603181020_seed_house_depreciation_flocks_18.up.sql rename to internal/database/migrations/20260604042051_seed_house_depreciation_flocks_18.up.sql index 15fbea96..79a1f191 100644 --- a/internal/database/migrations/20260603181020_seed_house_depreciation_flocks_18.up.sql +++ b/internal/database/migrations/20260604042051_seed_house_depreciation_flocks_18.up.sql @@ -3,6 +3,12 @@ -- depreciation_percent diturunkan = (1 - multiplication_percentage) * 100. -- Lookup engine: ? = ANY(project_flock_ids) — satu baris dipakai semua flock. +-- Hapus custom curve untuk array ini agar INSERT idempoten. +DELETE FROM house_depreciation_standards +WHERE project_flock_ids = ARRAY[18,14,12,15,9,19]::bigint[] + AND house_type = 'open_house'::house_type_enum + AND effective_date = DATE '2026-06-03'; + INSERT INTO house_depreciation_standards (project_flock_ids, house_type, day, effective_date, multiplication_percentage, depreciation_percent, standard_week, name) diff --git a/internal/database/migrations/20260603204029_seed_house_depreciation_flocks_26.down.sql b/internal/database/migrations/20260604042912_seed_house_depreciation_flocks_26.down.sql similarity index 100% rename from internal/database/migrations/20260603204029_seed_house_depreciation_flocks_26.down.sql rename to internal/database/migrations/20260604042912_seed_house_depreciation_flocks_26.down.sql diff --git a/internal/database/migrations/20260603204029_seed_house_depreciation_flocks_26.up.sql b/internal/database/migrations/20260604042912_seed_house_depreciation_flocks_26.up.sql similarity index 97% rename from internal/database/migrations/20260603204029_seed_house_depreciation_flocks_26.up.sql rename to internal/database/migrations/20260604042912_seed_house_depreciation_flocks_26.up.sql index da494675..0ca7d389 100644 --- a/internal/database/migrations/20260603204029_seed_house_depreciation_flocks_26.up.sql +++ b/internal/database/migrations/20260604042912_seed_house_depreciation_flocks_26.up.sql @@ -3,6 +3,12 @@ -- depreciation_percent diturunkan = (1 - multiplication_percentage) * 100. -- Lookup engine: ? = ANY(project_flock_ids) — satu baris dipakai semua flock. +-- Hapus custom curve untuk array ini agar INSERT idempoten. +DELETE FROM house_depreciation_standards +WHERE project_flock_ids = ARRAY[26]::bigint[] + AND house_type = 'close_house'::house_type_enum + AND effective_date = DATE '2026-06-03'; + -- house_type: close_house INSERT INTO house_depreciation_standards (project_flock_ids, house_type, day, effective_date, diff --git a/internal/database/migrations/20260603204147_seed_house_depreciation_flocks_20.down.sql b/internal/database/migrations/20260604043007_seed_house_depreciation_flocks_20.down.sql similarity index 100% rename from internal/database/migrations/20260603204147_seed_house_depreciation_flocks_20.down.sql rename to internal/database/migrations/20260604043007_seed_house_depreciation_flocks_20.down.sql diff --git a/internal/database/migrations/20260603204147_seed_house_depreciation_flocks_20.up.sql b/internal/database/migrations/20260604043007_seed_house_depreciation_flocks_20.up.sql similarity index 97% rename from internal/database/migrations/20260603204147_seed_house_depreciation_flocks_20.up.sql rename to internal/database/migrations/20260604043007_seed_house_depreciation_flocks_20.up.sql index 90655d6f..fb37bff4 100644 --- a/internal/database/migrations/20260603204147_seed_house_depreciation_flocks_20.up.sql +++ b/internal/database/migrations/20260604043007_seed_house_depreciation_flocks_20.up.sql @@ -3,6 +3,12 @@ -- depreciation_percent diturunkan = (1 - multiplication_percentage) * 100. -- Lookup engine: ? = ANY(project_flock_ids) — satu baris dipakai semua flock. +-- Hapus custom curve untuk array ini agar INSERT idempoten. +DELETE FROM house_depreciation_standards +WHERE project_flock_ids = ARRAY[20]::bigint[] + AND house_type = 'open_house'::house_type_enum + AND effective_date = DATE '2026-06-03'; + -- house_type: open_house INSERT INTO house_depreciation_standards (project_flock_ids, house_type, day, effective_date, diff --git a/internal/database/migrations/20260603205553_seed_house_depreciation_flocks_4.down.sql b/internal/database/migrations/20260604043052_seed_house_depreciation_flocks_4.down.sql similarity index 100% rename from internal/database/migrations/20260603205553_seed_house_depreciation_flocks_4.down.sql rename to internal/database/migrations/20260604043052_seed_house_depreciation_flocks_4.down.sql diff --git a/internal/database/migrations/20260603205553_seed_house_depreciation_flocks_4.up.sql b/internal/database/migrations/20260604043052_seed_house_depreciation_flocks_4.up.sql similarity index 95% rename from internal/database/migrations/20260603205553_seed_house_depreciation_flocks_4.up.sql rename to internal/database/migrations/20260604043052_seed_house_depreciation_flocks_4.up.sql index 47206e29..7f799cac 100644 --- a/internal/database/migrations/20260603205553_seed_house_depreciation_flocks_4.up.sql +++ b/internal/database/migrations/20260604043052_seed_house_depreciation_flocks_4.up.sql @@ -3,6 +3,12 @@ -- depreciation_percent diturunkan = (1 - multiplication_percentage) * 100. -- Lookup engine: ? = ANY(project_flock_ids) — satu baris dipakai semua flock. +-- Hapus custom curve untuk array ini agar INSERT idempoten. +DELETE FROM house_depreciation_standards +WHERE project_flock_ids = ARRAY[4]::bigint[] + AND house_type = 'open_house'::house_type_enum + AND effective_date = DATE '2026-06-03'; + -- house_type: open_house INSERT INTO house_depreciation_standards (project_flock_ids, house_type, day, effective_date, diff --git a/internal/database/migrations/20260603210426_seed_house_depreciation_flocks_5.down.sql b/internal/database/migrations/20260604043132_seed_house_depreciation_flocks_5.down.sql similarity index 100% rename from internal/database/migrations/20260603210426_seed_house_depreciation_flocks_5.down.sql rename to internal/database/migrations/20260604043132_seed_house_depreciation_flocks_5.down.sql diff --git a/internal/database/migrations/20260603210426_seed_house_depreciation_flocks_5.up.sql b/internal/database/migrations/20260604043132_seed_house_depreciation_flocks_5.up.sql similarity index 97% rename from internal/database/migrations/20260603210426_seed_house_depreciation_flocks_5.up.sql rename to internal/database/migrations/20260604043132_seed_house_depreciation_flocks_5.up.sql index 1611db5a..e45312cc 100644 --- a/internal/database/migrations/20260603210426_seed_house_depreciation_flocks_5.up.sql +++ b/internal/database/migrations/20260604043132_seed_house_depreciation_flocks_5.up.sql @@ -3,6 +3,12 @@ -- depreciation_percent diturunkan = (1 - multiplication_percentage) * 100. -- Lookup engine: ? = ANY(project_flock_ids) — satu baris dipakai semua flock. +-- Hapus custom curve untuk array ini agar INSERT idempoten. +DELETE FROM house_depreciation_standards +WHERE project_flock_ids = ARRAY[5]::bigint[] + AND house_type = 'open_house'::house_type_enum + AND effective_date = DATE '2026-06-03'; + -- house_type: open_house INSERT INTO house_depreciation_standards (project_flock_ids, house_type, day, effective_date, diff --git a/internal/database/migrations/20260603210841_seed_house_depreciation_flocks_6.down.sql b/internal/database/migrations/20260604043209_seed_house_depreciation_flocks_6.down.sql similarity index 100% rename from internal/database/migrations/20260603210841_seed_house_depreciation_flocks_6.down.sql rename to internal/database/migrations/20260604043209_seed_house_depreciation_flocks_6.down.sql diff --git a/internal/database/migrations/20260603210841_seed_house_depreciation_flocks_6.up.sql b/internal/database/migrations/20260604043209_seed_house_depreciation_flocks_6.up.sql similarity index 97% rename from internal/database/migrations/20260603210841_seed_house_depreciation_flocks_6.up.sql rename to internal/database/migrations/20260604043209_seed_house_depreciation_flocks_6.up.sql index 744c7119..ae57a387 100644 --- a/internal/database/migrations/20260603210841_seed_house_depreciation_flocks_6.up.sql +++ b/internal/database/migrations/20260604043209_seed_house_depreciation_flocks_6.up.sql @@ -3,6 +3,12 @@ -- depreciation_percent diturunkan = (1 - multiplication_percentage) * 100. -- Lookup engine: ? = ANY(project_flock_ids) — satu baris dipakai semua flock. +-- Hapus custom curve untuk array ini agar INSERT idempoten. +DELETE FROM house_depreciation_standards +WHERE project_flock_ids = ARRAY[6]::bigint[] + AND house_type = 'open_house'::house_type_enum + AND effective_date = DATE '2026-06-03'; + -- house_type: open_house INSERT INTO house_depreciation_standards (project_flock_ids, house_type, day, effective_date,