feat : penambahan rumah ibadah
This commit is contained in:
@@ -1,84 +1,43 @@
|
||||
const db = require('../config/database');
|
||||
|
||||
// Menyemai data awal rumah ibadah ke dalam tabel basis data
|
||||
const semai_data_rumah_ibadah = () => {
|
||||
// Kumpulan data statis yang merepresentasikan 6 agama resmi
|
||||
/**
|
||||
* Menyuntikkan data lokasi tempat penyaluran bantuan (Rumah Ibadah) di Pontianak
|
||||
* @param {object} db - Instansi koneksi SQLite
|
||||
*/
|
||||
async function buat_seeder_rumah_ibadah(db) {
|
||||
// Array objek berisi titik koordinat asli tempat ibadah ikonik di Pontianak
|
||||
const daftar_rumah_ibadah = [
|
||||
{
|
||||
nama_tempat: 'Masjid Raya Mujahidin',
|
||||
jenis_agama: 'Islam',
|
||||
lat: -0.0427,
|
||||
lng: 109.3425,
|
||||
alamat: 'Jl. Jenderal Ahmad Yani'
|
||||
},
|
||||
{
|
||||
nama_tempat: 'Gereja Katedral Santo Yosef',
|
||||
jenis_agama: 'Katolik',
|
||||
lat: -0.0355,
|
||||
lng: 109.3468,
|
||||
alamat: 'Jl. Pattimura'
|
||||
},
|
||||
{
|
||||
nama_tempat: 'Gereja HKBP',
|
||||
jenis_agama: 'Kristen',
|
||||
lat: -0.0381,
|
||||
lng: 109.3361,
|
||||
alamat: 'Jl. Imam Bonjol'
|
||||
},
|
||||
{
|
||||
nama_tempat: 'Pura Giripati Mulawarman',
|
||||
jenis_agama: 'Hindu',
|
||||
lat: -0.0556,
|
||||
lng: 109.3499,
|
||||
alamat: 'Jl. Adi Sucipto'
|
||||
},
|
||||
{
|
||||
nama_tempat: 'Vihara Bodhisatva Karaniya Metta',
|
||||
jenis_agama: 'Buddha',
|
||||
lat: -0.0225,
|
||||
lng: 109.3323,
|
||||
alamat: 'Jl. Kapten Marsan'
|
||||
},
|
||||
{
|
||||
nama_tempat: 'Makin Kelenteng',
|
||||
jenis_agama: 'Konghucu',
|
||||
lat: -0.0289,
|
||||
lng: 109.3375,
|
||||
alamat: 'Jl. Gajah Mada'
|
||||
}
|
||||
{ nama: 'Masjid Raya Mujahidin', agama: 'Islam', lat: -0.0336, lng: 109.3364, alamat: 'Jl. Ahmad Yani' },
|
||||
{ nama: 'Gereja Katedral Santo Yosef', agama: 'Katolik', lat: -0.0331, lng: 109.3330, alamat: 'Jl. Pattimura' },
|
||||
{ nama: 'Gereja HKBP Pontianak', agama: 'Kristen Protestan', lat: -0.0305, lng: 109.3321, alamat: 'Jl. Pulau We' },
|
||||
{ nama: 'Vihara Bodhisatva Karaniya Metta', agama: 'Buddha', lat: -0.0255, lng: 109.3361, alamat: 'Jl. Kapten Marsan' },
|
||||
{ nama: 'Pura Giripati Mulawarman', agama: 'Hindu', lat: -0.0631, lng: 109.3705, alamat: 'Jl. Adi Sucipto' },
|
||||
{ nama: 'Kelenteng Kwan Tie Bio', agama: 'Konghucu', lat: -0.0261, lng: 109.3352, alamat: 'Jl. Diponegoro' }
|
||||
];
|
||||
|
||||
db.serialize(() => {
|
||||
// Praktik penanganan kesalahan otomatis: Memulai transaksi untuk memastikan semua data masuk secara bersamaan, atau dibatalkan seluruhnya jika terjadi satu kegagalan
|
||||
db.run('BEGIN TRANSACTION');
|
||||
return new Promise((resolve, reject) => {
|
||||
db.get("SELECT COUNT(*) as hitung FROM RUMAH_IBADAH", [], (err, row) => {
|
||||
if (err) return reject(err);
|
||||
|
||||
if (row.hitung > 0) {
|
||||
console.log('Seeder Rumah Ibadah: Data titik penyaluran sudah tersedia.');
|
||||
return resolve();
|
||||
}
|
||||
|
||||
// Praktik keamanan: Menyiapkan query dengan parameter terikat untuk mencegah injeksi data berbahaya
|
||||
const perintah_insert = db.prepare(`INSERT INTO RUMAH_IBADAH (nama_tempat, jenis_agama, lat, lng, alamat) VALUES (?, ?, ?, ?, ?)`);
|
||||
|
||||
// Baris kompleks: Melakukan perulangan pada array data, lalu mengeksekusi perintah SQL (statement.run) secara asinkron untuk setiap objek rumah ibadah. Parameter yang dikirimkan dipetakan secara berurutan sesuai dengan tanda tanya pada query di atas.
|
||||
daftar_rumah_ibadah.forEach((rumah) => {
|
||||
perintah_insert.run([rumah.nama_tempat, rumah.jenis_agama, rumah.lat, rumah.lng, rumah.alamat], (err) => {
|
||||
if (err) {
|
||||
console.error(`Gagal memasukkan data ${rumah.nama_tempat}:`, err.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Menyelesaikan penyiapan statement agar memori peladen dibebaskan
|
||||
perintah_insert.finalize();
|
||||
|
||||
// Mengunci seluruh perubahan ke dalam basis data SQLite
|
||||
db.run('COMMIT', (err) => {
|
||||
if (err) {
|
||||
console.error('Kegagalan transaksi basis data:', err.message);
|
||||
process.exit(1);
|
||||
} else {
|
||||
console.log('Proses penyemaian data Rumah Ibadah berhasil diselesaikan.');
|
||||
// Menghentikan eksekusi skrip karena proses seeder berjalan terpisah dari peladen utama
|
||||
process.exit(0);
|
||||
try {
|
||||
const kueri_insert = `INSERT INTO RUMAH_IBADAH (nama_tempat, agama, lat, lng, alamat) VALUES (?, ?, ?, ?, ?)`;
|
||||
|
||||
daftar_rumah_ibadah.forEach((tempat) => {
|
||||
db.run(kueri_insert, [tempat.nama, tempat.agama, tempat.lat, tempat.lng, tempat.alamat], (error_sql) => {
|
||||
if (error_sql) console.error(`Gagal menyisipkan ${tempat.nama}:`, error_sql.message);
|
||||
});
|
||||
});
|
||||
|
||||
console.log('Seeder: 6 Titik pangkalan rumah ibadah Pontianak berhasil diinisialisasi.');
|
||||
resolve();
|
||||
} catch (error_sistem) {
|
||||
reject(error_sistem);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
semai_data_rumah_ibadah();
|
||||
module.exports = buat_seeder_rumah_ibadah;
|
||||
@@ -51,6 +51,17 @@ async function inisialisasi_dan_seeding() {
|
||||
frekuensi_makan TEXT,
|
||||
kepemilikan_aset TEXT
|
||||
)`);
|
||||
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
|
||||
)`);
|
||||
|
||||
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. Mengeksekusi modul fungsi seeder bawaan milik Anda secara berurutan
|
||||
console.log('Memulai penanaman data kredensial...');
|
||||
@@ -58,6 +69,7 @@ async function inisialisasi_dan_seeding() {
|
||||
// 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) {
|
||||
|
||||
Reference in New Issue
Block a user