const bcrypt = require('bcrypt'); /** * Menyuntikkan akun petugas lapangan secara aman dengan pencegahan duplikasi data * @param {object} db - Instansi koneksi SQLite */ async function buat_akun_petugas_seeder(db) { const username_petugas = 'petugas_lapangan'; const password_murni = 'password'; return new Promise((resolve, reject) => { // Praktik Keamanan: Memeriksa eksistensi username guna menghindari kegagalan SQLITE_CONSTRAINT db.get("SELECT COUNT(*) as hitung FROM PETUGAS WHERE username = ?", [username_petugas], async (err, row) => { if (err) return reject(err); if (row.hitung > 0) { console.log(`Seeder Petugas: Akun '${username_petugas}' sudah aman tersedia.`); return resolve(); } try { const salt_rounds = 10; const password_terhash = await bcrypt.hash(password_murni, salt_rounds); const kueri_insert = `INSERT INTO PETUGAS (username, password) VALUES (?, ?)`; db.run(kueri_insert, [username_petugas, password_terhash], function(error_sql) { if (error_sql) return reject(error_sql); console.log(`Seeder: Akun petugas '${username_petugas}' berhasil diinisialisasi.`); resolve(); }); } catch (error_sistem) { reject(error_sistem); } }); }); } module.exports = buat_akun_petugas_seeder;