Files
2026-06-11 02:31:09 +00:00

87 lines
3.6 KiB
JavaScript

const sqlite3 = require('sqlite3').verbose();
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, migrasi kolom, dan penanaman data master
*/
async function inisialisasi_dan_seeding() {
const db = new sqlite3.Database(db_path);
return new Promise((resolve, reject) => {
db.serialize(async () => {
try {
// 1. Memastikan tabel dasar terbuat dengan sempurna
db.run(`CREATE TABLE IF NOT EXISTS ADMIN (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE,
password TEXT
)`);
db.run(`CREATE TABLE IF NOT EXISTS PETUGAS (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE,
password TEXT
)`);
db.run(`CREATE TABLE IF NOT EXISTS MUSTAHIK (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nik TEXT UNIQUE,
nama_kk TEXT,
no_kk TEXT,
jumlah_tanggungan INTEGER,
status_validasi TEXT DEFAULT 'Pending',
lat REAL,
lng REAL
)`);
db.run(`CREATE TABLE IF NOT EXISTS RUMAH_IBADAH (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama_tempat TEXT,
agama TEXT,
lat REAL,
lng REAL,
alamat TEXT
)`);
// 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;
}
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();
});
} catch (err) {
reject(err);
}
});
});
}
module.exports = { inisialisasi_dan_seeding };