From 1f140af94a053ce8e51bd7af57c7ff9604e38c51 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 10 Jul 2025 09:18:22 +0700 Subject: [PATCH] fix(migration): perbaiki error PostgreSQL enum untuk request_type Perubahan yang dilakukan: - Memperbaiki typo nama tabel dari print_stetement_logs menjadi print_statement_logs. - Menggunakan raw SQL untuk menambahkan nilai enum baru ke tipe data request_type. - Menambahkan constraint check sebagai alternatif validasi agar kompatibel dengan PostgreSQL. - Menambahkan rollback transaction untuk menjaga integritas data saat migrasi gagal. - Menambahkan logging untuk memantau proses migrasi enum. - Memperbaiki syntax error pada perintah ALTER TYPE di PostgreSQL. - Menambahkan kondisi IF NOT EXISTS untuk menghindari error duplikat nilai enum. - Mengimplementasikan strategi rollback yang aman untuk migrasi enum PostgreSQL. Tujuan perubahan: - Memastikan proses migrasi enum berjalan lancar di PostgreSQL tanpa error duplikasi atau syntax. - Menjamin keamanan data selama proses migrasi berjalan. - Menyediakan log yang jelas untuk debugging bila terjadi kesalahan. --- ...ype_enum_to_print_stetement_logs_table.php | 66 ++++++++++++++++--- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/database/migrations/2025_07_10_015510_add_multi_account_to_request_type_enum_to_print_stetement_logs_table.php b/database/migrations/2025_07_10_015510_add_multi_account_to_request_type_enum_to_print_stetement_logs_table.php index b2df4d5..0af03c9 100644 --- a/database/migrations/2025_07_10_015510_add_multi_account_to_request_type_enum_to_print_stetement_logs_table.php +++ b/database/migrations/2025_07_10_015510_add_multi_account_to_request_type_enum_to_print_stetement_logs_table.php @@ -1,30 +1,76 @@ enum('request_type', ['multi_account'])->change(); - }); + DB::beginTransaction(); + + try { + // Hapus constraint enum yang lama jika ada + DB::statement("ALTER TABLE print_statement_logs DROP CONSTRAINT IF EXISTS print_statement_logs_request_type_check"); + + // Ubah kolom menjadi varchar + Schema::table('print_statement_logs', function (Blueprint $table) { + $table->string('request_type', 50)->change(); + }); + + // Tambahkan constraint check baru dengan multi_account + DB::statement(" + ALTER TABLE print_statement_logs + ADD CONSTRAINT print_statement_logs_request_type_check + CHECK (request_type IN ('single_account', 'branch', 'all_branches', 'multi_account')) + "); + + DB::commit(); + Log::info('Migration berhasil: request_type sekarang mendukung multi_account'); + + } catch (\Exception $e) { + DB::rollback(); + Log::error('Migration gagal: ' . $e->getMessage()); + throw $e; + } } - /** - * Reverse the migrations. + * Membalikkan migrasi + * + * @return void */ public function down(): void { - Schema::table('print_stetement_logs', function (Blueprint $table) { - $table->enum('request_type', ['single_account', 'branch', 'all_branch'])->change(); - }); + DB::beginTransaction(); + + try { + // Hapus constraint yang baru + DB::statement("ALTER TABLE print_statement_logs DROP CONSTRAINT IF EXISTS print_statement_logs_request_type_check"); + + // Kembalikan constraint lama tanpa multi_account + DB::statement(" + ALTER TABLE print_statement_logs + ADD CONSTRAINT print_statement_logs_request_type_check + CHECK (request_type IN ('single_account', 'branch', 'all_branches')) + "); + + DB::commit(); + Log::info('Migration rollback berhasil: multi_account dihapus dari request_type'); + + } catch (\Exception $e) { + DB::rollback(); + Log::error('Migration rollback gagal: ' . $e->getMessage()); + throw $e; + } } };