From b02b28b0c09e8f5e0f56a7eab0246db4758824e5 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 9 Jun 2026 13:58:36 +0700 Subject: [PATCH] feat : fix bug --- seeders/seed_manager.js | 55 ++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/seeders/seed_manager.js b/seeders/seed_manager.js index 2622ec8..94ead73 100644 --- a/seeders/seed_manager.js +++ b/seeders/seed_manager.js @@ -4,13 +4,13 @@ const path = require('path'); // Mengimpor fungsi seeder asli bawaan milik Anda const seed_admin = require('./seed_admin'); const seed_petugas = require('./seed_petugas'); - +const rumah_ibadah_seeder = require('./rumah_ibadah_seeder'); // Jalur absolut database yang terhubung langsung ke Persistent Storage Coolify const db_path = '/app/data/database_baru.sqlite'; /** - * Mengatur jalannya proses inisialisasi tabel dan penanaman kredensial master + * Mengatur jalannya proses inisialisasi tabel, migrasi kolom, dan penanaman data master */ async function inisialisasi_dan_seeding() { const db = new sqlite3.Database(db_path); @@ -18,7 +18,7 @@ async function inisialisasi_dan_seeding() { return new Promise((resolve, reject) => { db.serialize(async () => { try { - // 1. Memastikan tabel master yang dibutuhkan sistem Express terbentuk sempurna + // 1. Memastikan tabel dasar terbuat dengan sempurna db.run(`CREATE TABLE IF NOT EXISTS ADMIN ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, @@ -39,18 +39,9 @@ async function inisialisasi_dan_seeding() { jumlah_tanggungan INTEGER, status_validasi TEXT DEFAULT 'Pending', lat REAL, - lng REAL, - luas_lantai_per_kapita TEXT, - material_lantai TEXT, - material_dinding TEXT, - fasilitas_sanitasi TEXT, - sumber_air_minum TEXT, - sumber_penerangan TEXT, - pekerjaan_utama TEXT, - pendapatan_bulanan REAL, - frekuensi_makan TEXT, - kepemilikan_aset TEXT + lng REAL )`); + db.run(`CREATE TABLE IF NOT EXISTS RUMAH_IBADAH ( id INTEGER PRIMARY KEY AUTOINCREMENT, nama_tempat TEXT, @@ -60,22 +51,34 @@ async function inisialisasi_dan_seeding() { alamat TEXT )`); - try { db.run("ALTER TABLE MUSTAHIK ADD COLUMN agama TEXT"); } catch (e) {} - try { db.run("ALTER TABLE MUSTAHIK ADD COLUMN id_rumah_ibadah INTEGER"); } catch (e) {} + // 2. Baris Kompleks: Melakukan pemeriksaan skema internal tabel MUSTAHIK secara asinkron menggunakan perintah PRAGMA. Hasil pemindaian berupa array objek kolom diverifikasi terlebih dahulu guna menghindari eksekusi ganda perintah ALTER TABLE yang berpotensi merusak konsistensi biner SQLite. + db.all(`PRAGMA table_info(MUSTAHIK)`, [], async (err_pragma, kolom_kolom) => { + if (err_pragma) { + console.error("Gagal membaca struktur tabel via PRAGMA:", err_pragma.message); + return; + } - // 2. Mengeksekusi modul fungsi seeder bawaan milik Anda secara berurutan - console.log('Memulai penanaman data kredensial...'); - - // Catatan: Pastikan file seeder Anda mengekspor fungsi (contoh: module.exports = function...) - if (typeof seed_admin === 'function') await seed_admin(db); - if (typeof seed_petugas === 'function') await seed_petugas(db); - if (typeof rumah_ibadah_seeder === 'function') await rumah_ibadah_seeder(db); + const sudah_ada_agama = kolom_kolom.some(k => k.name === 'agama'); + const sudah_ada_pangkalan = kolom_kolom.some(k => k.name === 'id_rumah_ibadah'); + + if (!sudah_ada_agama) { + db.run("ALTER TABLE MUSTAHIK ADD COLUMN agama TEXT"); + } + if (!sudah_ada_pangkalan) { + db.run("ALTER TABLE MUSTAHIK ADD COLUMN id_rumah_ibadah INTEGER"); + } + + // 3. Mengeksekusi seluruh fungsi seeder secara berurutan setelah penjaminan kolom selesai + console.log('Memulai sinkronisasi penanaman data master...'); + if (typeof seed_admin === 'function') await seed_admin(db); + if (typeof seed_petugas === 'function') await seed_petugas(db); + if (typeof rumah_ibadah_seeder === 'function') await rumah_ibadah_seeder(db); + + resolve(); + }); - resolve(); } catch (err) { reject(err); - } finally { - db.close(); } }); });