85 lines
4.3 KiB
SQL
85 lines
4.3 KiB
SQL
CREATE DATABASE IF NOT EXISTS webgis_poverty_mapping
|
|
CHARACTER SET utf8mb4
|
|
COLLATE utf8mb4_unicode_ci;
|
|
|
|
USE webgis_poverty_mapping;
|
|
|
|
CREATE TABLE users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
username VARCHAR(50) NOT NULL UNIQUE,
|
|
password VARCHAR(255) NOT NULL,
|
|
nama_lengkap VARCHAR(150) NOT NULL,
|
|
role ENUM('admin','surveyor','pemangku') NOT NULL DEFAULT 'surveyor',
|
|
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Admin default — password: admin123
|
|
-- Hash di-generate dengan password_hash('admin123', PASSWORD_BCRYPT)
|
|
INSERT INTO users (username, password, nama_lengkap, role) VALUES
|
|
('admin', '$2y$10$Xb5FU6uo67rVETXAlSYJ..wn8IudyYwGzUbyMe8yQ1TLFlvt.S9F6', 'Administrator', 'admin');
|
|
|
|
CREATE TABLE rumah_ibadah (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
nama VARCHAR(200) NOT NULL,
|
|
jenis ENUM('masjid','gereja','pura','klenteng','vihara','lain') NOT NULL DEFAULT 'masjid',
|
|
alamat TEXT,
|
|
pic VARCHAR(150) NOT NULL,
|
|
no_wa VARCHAR(30) DEFAULT NULL,
|
|
radius INT NOT NULL DEFAULT 500, -- meter
|
|
lat DOUBLE NOT NULL,
|
|
lng DOUBLE NOT NULL,
|
|
foto_path VARCHAR(255) DEFAULT NULL,
|
|
surveyor_id INT DEFAULT NULL,
|
|
status ENUM('pending','verified','rejected') NOT NULL DEFAULT 'verified',
|
|
alasan_penolakan TEXT DEFAULT NULL,
|
|
kecamatan VARCHAR(100) DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_ri_surveyor FOREIGN KEY (surveyor_id) REFERENCES users(id) ON DELETE SET NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE warga_miskin (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
nama_kk VARCHAR(200) NOT NULL,
|
|
nik VARCHAR(16) DEFAULT NULL,
|
|
jumlah_anggota INT NOT NULL DEFAULT 1,
|
|
keterangan TEXT,
|
|
alamat TEXT DEFAULT NULL,
|
|
kecamatan VARCHAR(100) DEFAULT NULL,
|
|
lat DOUBLE NOT NULL,
|
|
lng DOUBLE NOT NULL,
|
|
ibadah_id INT DEFAULT NULL, -- NULL = belum terjangkau
|
|
foto_path VARCHAR(255) DEFAULT NULL,
|
|
surveyor_id INT DEFAULT NULL,
|
|
status ENUM('pending','verified','rejected') NOT NULL DEFAULT 'verified',
|
|
alasan_penolakan TEXT DEFAULT NULL,
|
|
bantuan_diterima ENUM('sembako','beasiswa','modal','tunai','tidak_ada') NOT NULL DEFAULT 'tidak_ada',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
CONSTRAINT uq_warga_nik UNIQUE (nik),
|
|
CONSTRAINT fk_wm_ibadah FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL,
|
|
CONSTRAINT fk_wm_surveyor FOREIGN KEY (surveyor_id) REFERENCES users(id) ON DELETE SET NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE audit_logs (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
aksi VARCHAR(100) NOT NULL,
|
|
target_type VARCHAR(50) DEFAULT NULL,
|
|
target_id INT DEFAULT NULL,
|
|
data_before JSON DEFAULT NULL,
|
|
data_after JSON DEFAULT NULL,
|
|
ip_address VARCHAR(45) DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_audit_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE INDEX idx_ri_status ON rumah_ibadah(status);
|
|
CREATE INDEX idx_ri_kecamatan ON rumah_ibadah(kecamatan);
|
|
CREATE INDEX idx_wm_status ON warga_miskin(status);
|
|
CREATE INDEX idx_wm_kecamatan ON warga_miskin(kecamatan);
|
|
CREATE INDEX idx_wm_ibadah ON warga_miskin(ibadah_id);
|
|
CREATE INDEX idx_audit_user ON audit_logs(user_id);
|
|
CREATE INDEX idx_audit_aksi ON audit_logs(aksi);
|
|
CREATE INDEX idx_audit_created ON audit_logs(created_at); |