Feat: Integrasi otomatis seeder bawaan proyek ke startup server
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
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 dan penanaman kredensial 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 master yang dibutuhkan sistem Express terbentuk 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,
|
||||
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
|
||||
)`);
|
||||
|
||||
// 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);
|
||||
|
||||
resolve();
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
} finally {
|
||||
db.close();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = { inisialisasi_dan_seeding };
|
||||
@@ -56,6 +56,15 @@ app.use((err, req, res, next) => {
|
||||
});
|
||||
|
||||
// Menjalankan server
|
||||
app.listen(port, () => {
|
||||
app.listen(port, async () => {
|
||||
console.log(`Server WebGIS berjalan dan siap diakses pada port ${port}`);
|
||||
|
||||
// Praktik Penanganan Kesalahan Otomatis:
|
||||
// Menjalankan proses pembuatan tabel dan penanaman data master jika SQLite kosong
|
||||
try {
|
||||
await inisialisasi_dan_seeding();
|
||||
console.log('Sinkronisasi data seeder bawaan ke database produksi sukses.');
|
||||
} catch (error_sistem_seed) {
|
||||
console.error('Peringatan: Gagal mengeksekusi database seeder:', error_sistem_seed.message);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user