feat : fix bug

This commit is contained in:
unknown
2026-06-09 13:58:36 +07:00
parent 368492d2de
commit b02b28b0c0
+29 -26
View File
@@ -4,13 +4,13 @@ const path = require('path');
// Mengimpor fungsi seeder asli bawaan milik Anda // Mengimpor fungsi seeder asli bawaan milik Anda
const seed_admin = require('./seed_admin'); const seed_admin = require('./seed_admin');
const seed_petugas = require('./seed_petugas'); const seed_petugas = require('./seed_petugas');
const rumah_ibadah_seeder = require('./rumah_ibadah_seeder');
// Jalur absolut database yang terhubung langsung ke Persistent Storage Coolify // Jalur absolut database yang terhubung langsung ke Persistent Storage Coolify
const db_path = '/app/data/database_baru.sqlite'; 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() { async function inisialisasi_dan_seeding() {
const db = new sqlite3.Database(db_path); const db = new sqlite3.Database(db_path);
@@ -18,7 +18,7 @@ async function inisialisasi_dan_seeding() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
db.serialize(async () => { db.serialize(async () => {
try { 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 ( db.run(`CREATE TABLE IF NOT EXISTS ADMIN (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE, username TEXT UNIQUE,
@@ -39,18 +39,9 @@ async function inisialisasi_dan_seeding() {
jumlah_tanggungan INTEGER, jumlah_tanggungan INTEGER,
status_validasi TEXT DEFAULT 'Pending', status_validasi TEXT DEFAULT 'Pending',
lat REAL, lat REAL,
lng 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
)`); )`);
db.run(`CREATE TABLE IF NOT EXISTS RUMAH_IBADAH ( db.run(`CREATE TABLE IF NOT EXISTS RUMAH_IBADAH (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
nama_tempat TEXT, nama_tempat TEXT,
@@ -60,22 +51,34 @@ async function inisialisasi_dan_seeding() {
alamat TEXT alamat TEXT
)`); )`);
try { db.run("ALTER TABLE MUSTAHIK ADD COLUMN agama TEXT"); } 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.
try { db.run("ALTER TABLE MUSTAHIK ADD COLUMN id_rumah_ibadah INTEGER"); } catch (e) {} 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 const sudah_ada_agama = kolom_kolom.some(k => k.name === 'agama');
console.log('Memulai penanaman data kredensial...'); const sudah_ada_pangkalan = kolom_kolom.some(k => k.name === 'id_rumah_ibadah');
// Catatan: Pastikan file seeder Anda mengekspor fungsi (contoh: module.exports = function...) if (!sudah_ada_agama) {
if (typeof seed_admin === 'function') await seed_admin(db); db.run("ALTER TABLE MUSTAHIK ADD COLUMN agama TEXT");
if (typeof seed_petugas === 'function') await seed_petugas(db); }
if (typeof rumah_ibadah_seeder === 'function') await rumah_ibadah_seeder(db); 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) { } catch (err) {
reject(err); reject(err);
} finally {
db.close();
} }
}); });
}); });