Files
UAS-SIG/seeders/rumah_ibadah_seeder.js
T
2026-06-03 20:05:50 +07:00

84 lines
3.1 KiB
JavaScript

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
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'
}
];
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');
// 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);
}
});
});
};
semai_data_rumah_ibadah();