diff --git a/database.sql b/database.sql index dc4182e..5e0b854 100644 --- a/database.sql +++ b/database.sql @@ -1,152 +1,236 @@ --- ============================================================ --- database.sql — WebGIS Poverty Mapping v2 --- Tiara Chontesa — D0141231070 --- ============================================================ - -CREATE DATABASE IF NOT EXISTS db_bantuan - CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -USE db_bantuan; - --- ──────────────────────────────────────── --- USERS (3 role: admin, relawan, pengurus, pemerintah) --- ──────────────────────────────────────── -CREATE TABLE IF NOT EXISTS users ( - id INT AUTO_INCREMENT PRIMARY KEY, - nama_lengkap VARCHAR(150) NOT NULL, - username VARCHAR(80) NOT NULL UNIQUE, - email VARCHAR(150) NOT NULL UNIQUE, - password VARCHAR(255) NOT NULL, - role ENUM('admin','relawan','pengurus','pemerintah') NOT NULL DEFAULT 'relawan', - foto VARCHAR(255) DEFAULT NULL, - aktif TINYINT(1) NOT NULL DEFAULT 1, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - last_login TIMESTAMP NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- Seed: admin default (password: admin123) -INSERT INTO users (nama_lengkap, username, email, password, role) VALUES -('Administrator', 'admin', 'admin@webgis.id', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin'); - --- ──────────────────────────────────────── --- RUMAH IBADAH --- ──────────────────────────────────────── -CREATE TABLE IF NOT EXISTS rumah_ibadah ( - id INT AUTO_INCREMENT PRIMARY KEY, - nama_ibadah VARCHAR(150) NOT NULL, - kategori ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid', - alamat VARCHAR(255) DEFAULT NULL, - nama_pengurus VARCHAR(100) DEFAULT NULL, - no_telp VARCHAR(20) DEFAULT NULL, - kuota_bantuan INT NOT NULL DEFAULT 20, - radius_m INT NOT NULL DEFAULT 300, - lat DOUBLE NOT NULL, - lng DOUBLE NOT NULL, - dibuat_oleh INT DEFAULT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - FOREIGN KEY (dibuat_oleh) REFERENCES users(id) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- ──────────────────────────────────────── --- RUMAH MISKIN / KPM --- ──────────────────────────────────────── -CREATE TABLE IF NOT EXISTS rumah_miskin ( - id INT AUTO_INCREMENT PRIMARY KEY, - nama_kepala_keluarga VARCHAR(150) NOT NULL, - nik VARCHAR(16) DEFAULT NULL, - tanggal_lahir DATE DEFAULT NULL, - jenis_kelamin ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki', - jumlah_tanggungan TINYINT DEFAULT 0, - pendapatan_bulanan BIGINT DEFAULT 0, - pekerjaan VARCHAR(100) DEFAULT NULL, - kondisi_rumah ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak', - no_telp VARCHAR(20) DEFAULT NULL, - rt_rw VARCHAR(20) DEFAULT NULL, - kelurahan VARCHAR(100) DEFAULT NULL, - kecamatan VARCHAR(100) DEFAULT NULL, - keterangan TEXT DEFAULT NULL, - status_bantuan ENUM('Belum Terbantu','Terjangkau','Sudah Menerima') NOT NULL DEFAULT 'Belum Terbantu', - prioritas TINYINT(1) DEFAULT 0 COMMENT '1 = prioritas tinggi (terdampak bencana)', - lat DOUBLE NOT NULL, - lng DOUBLE NOT NULL, - didata_oleh INT DEFAULT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - FOREIGN KEY (didata_oleh) REFERENCES users(id) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- ──────────────────────────────────────── --- BENCANA --- ──────────────────────────────────────── -CREATE TABLE IF NOT EXISTS bencana ( - id INT AUTO_INCREMENT PRIMARY KEY, - nama_bencana VARCHAR(150) NOT NULL, - jenis ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir', - tanggal DATE NOT NULL, - lokasi VARCHAR(255) DEFAULT NULL, - deskripsi TEXT DEFAULT NULL, - status ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif', - lat DOUBLE DEFAULT NULL, - lng DOUBLE DEFAULT NULL, - radius_m INT DEFAULT 500, - dibuat_oleh INT DEFAULT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (dibuat_oleh) REFERENCES users(id) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- ──────────────────────────────────────── --- WARGA TERDAMPAK BENCANA (relasi N:M) --- ──────────────────────────────────────── -CREATE TABLE IF NOT EXISTS bencana_terdampak ( - id INT AUTO_INCREMENT PRIMARY KEY, - bencana_id INT NOT NULL, - warga_id INT NOT NULL, - tingkat ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang', - keterangan TEXT DEFAULT NULL, - ditandai_oleh INT DEFAULT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - UNIQUE KEY unik_bencana_warga (bencana_id, warga_id), - FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE CASCADE, - FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) ON DELETE CASCADE, - FOREIGN KEY (ditandai_oleh) REFERENCES users(id) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- ──────────────────────────────────────── --- BANTUAN TERSALUR --- ──────────────────────────────────────── -USE db_poverty_mapping; - -CREATE TABLE IF NOT EXISTS bantuan_tersalur ( - id INT AUTO_INCREMENT PRIMARY KEY, - warga_id INT NOT NULL, - ibadah_id INT DEFAULT NULL, - bencana_id INT DEFAULT NULL, - jenis_bantuan VARCHAR(150) NOT NULL, - jumlah VARCHAR(100) DEFAULT NULL COMMENT 'mis: 50kg beras, Rp500.000', - tanggal DATE NOT NULL, - petugas VARCHAR(150) DEFAULT NULL, - keterangan TEXT DEFAULT NULL, - disalurkan_oleh INT DEFAULT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - status ENUM('Pending','Tersalurkan') NOT NULL DEFAULT 'Tersalurkan', - status_konfirmasi ENUM('Menunggu','Dikonfirmasi','Ditolak') NOT NULL DEFAULT 'Menunggu', - nama_penerima_konfirmasi VARCHAR(150) DEFAULT NULL, - catatan_konfirmasi TEXT DEFAULT NULL, - dikonfirmasi_oleh INT DEFAULT NULL, - tgl_konfirmasi TIMESTAMP NULL DEFAULT NULL, -- <-- Tanda koma di sini tadinya ketinggalan - - -- DEKLARASI HUBUNGAN RELASI (FOREIGN KEY) - FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) ON DELETE CASCADE, - FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL, - FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE SET NULL, - FOREIGN KEY (disalurkan_oleh) REFERENCES users(id) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- ──────────────────────────────────────── --- INDEX --- ──────────────────────────────────────── -CREATE INDEX idx_miskin_coords ON rumah_miskin (lat, lng); -CREATE INDEX idx_ibadah_coords ON rumah_ibadah (lat, lng); -CREATE INDEX idx_miskin_status ON rumah_miskin (status_bantuan); -CREATE INDEX idx_miskin_prioritas ON rumah_miskin (prioritas); -CREATE INDEX idx_bencana_status ON bencana (status); \ No newline at end of file +-- ============================================================ +-- database_fix.sql +-- WebGIS Poverty Mapping - UAS SIG Tiara +-- Versi sudah diperbaiki untuk Coolify +-- PENTING: +-- 1. Tidak memakai CREATE DATABASE. +-- 2. Tidak memakai USE db_poverty_mapping / USE db_bantuan. +-- 3. Akan memakai database aktif dari Coolify. +-- 4. File ini akan reset tabel utama. +-- ============================================================ + +SET FOREIGN_KEY_CHECKS = 0; + +DROP TABLE IF EXISTS bantuan_tersalur; +DROP TABLE IF EXISTS bencana_terdampak; +DROP TABLE IF EXISTS bencana; +DROP TABLE IF EXISTS rumah_miskin; +DROP TABLE IF EXISTS rumah_ibadah; +DROP TABLE IF EXISTS users; + +SET FOREIGN_KEY_CHECKS = 1; + +-- ============================================================ +-- USERS +-- Role: admin, relawan, pengurus, pemerintah +-- Password demo semua akun: password +-- ============================================================ +CREATE TABLE users ( + id INT AUTO_INCREMENT PRIMARY KEY, + nama_lengkap VARCHAR(150) NOT NULL, + username VARCHAR(80) NOT NULL UNIQUE, + email VARCHAR(150) NOT NULL UNIQUE, + password VARCHAR(255) NOT NULL, + role ENUM('admin','relawan','pengurus','pemerintah') NOT NULL DEFAULT 'relawan', + foto VARCHAR(255) DEFAULT NULL, + aktif TINYINT(1) NOT NULL DEFAULT 1, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + last_login TIMESTAMP NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +INSERT INTO users (nama_lengkap, username, email, password, role, aktif) VALUES +('Administrator', 'admin', 'admin@webgis.id', 'password', 'admin', 1), +('Pemerintah Demo', 'pemerintah', 'pemerintah@webgis.id', 'password', 'pemerintah', 1), +('Pengurus Rumah Ibadah Demo', 'pengurus', 'pengurus@webgis.id', 'password', 'pengurus', 1), +('Relawan Demo', 'relawan', 'relawan@webgis.id', 'password', 'relawan', 1); + +-- ============================================================ +-- RUMAH IBADAH +-- ============================================================ +CREATE TABLE rumah_ibadah ( + id INT AUTO_INCREMENT PRIMARY KEY, + nama_ibadah VARCHAR(150) NOT NULL, + kategori ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid', + alamat VARCHAR(255) DEFAULT NULL, + nama_pengurus VARCHAR(100) DEFAULT NULL, + no_telp VARCHAR(20) DEFAULT NULL, + kuota_bantuan INT NOT NULL DEFAULT 20, + radius_m INT NOT NULL DEFAULT 300, + lat DOUBLE NOT NULL, + lng DOUBLE NOT NULL, + dibuat_oleh INT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT fk_ibadah_user + FOREIGN KEY (dibuat_oleh) REFERENCES users(id) + ON DELETE SET NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- ============================================================ +-- RUMAH MISKIN / KPM +-- ============================================================ +CREATE TABLE rumah_miskin ( + id INT AUTO_INCREMENT PRIMARY KEY, + nama_kepala_keluarga VARCHAR(150) NOT NULL, + nik VARCHAR(16) DEFAULT NULL, + tanggal_lahir DATE DEFAULT NULL, + jenis_kelamin ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki', + jumlah_tanggungan TINYINT DEFAULT 0, + pendapatan_bulanan BIGINT DEFAULT 0, + pekerjaan VARCHAR(100) DEFAULT NULL, + kondisi_rumah ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak', + no_telp VARCHAR(20) DEFAULT NULL, + rt_rw VARCHAR(20) DEFAULT NULL, + kelurahan VARCHAR(100) DEFAULT NULL, + kecamatan VARCHAR(100) DEFAULT NULL, + keterangan TEXT DEFAULT NULL, + status_bantuan ENUM('Belum Terbantu','Terjangkau','Sudah Menerima') NOT NULL DEFAULT 'Belum Terbantu', + prioritas TINYINT(1) DEFAULT 0 COMMENT '1 = prioritas tinggi atau terdampak bencana', + lat DOUBLE NOT NULL, + lng DOUBLE NOT NULL, + didata_oleh INT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT fk_miskin_user + FOREIGN KEY (didata_oleh) REFERENCES users(id) + ON DELETE SET NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- ============================================================ +-- BENCANA +-- ============================================================ +CREATE TABLE bencana ( + id INT AUTO_INCREMENT PRIMARY KEY, + nama_bencana VARCHAR(150) NOT NULL, + jenis ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir', + tanggal DATE NOT NULL, + lokasi VARCHAR(255) DEFAULT NULL, + deskripsi TEXT DEFAULT NULL, + status ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif', + lat DOUBLE DEFAULT NULL, + lng DOUBLE DEFAULT NULL, + radius_m INT DEFAULT 500, + dibuat_oleh INT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_bencana_user + FOREIGN KEY (dibuat_oleh) REFERENCES users(id) + ON DELETE SET NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- ============================================================ +-- WARGA TERDAMPAK BENCANA +-- ============================================================ +CREATE TABLE bencana_terdampak ( + id INT AUTO_INCREMENT PRIMARY KEY, + bencana_id INT NOT NULL, + warga_id INT NOT NULL, + tingkat ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang', + keterangan TEXT DEFAULT NULL, + ditandai_oleh INT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + UNIQUE KEY unik_bencana_warga (bencana_id, warga_id), + CONSTRAINT fk_terdampak_bencana + FOREIGN KEY (bencana_id) REFERENCES bencana(id) + ON DELETE CASCADE, + CONSTRAINT fk_terdampak_warga + FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) + ON DELETE CASCADE, + CONSTRAINT fk_terdampak_user + FOREIGN KEY (ditandai_oleh) REFERENCES users(id) + ON DELETE SET NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- ============================================================ +-- BANTUAN TERSALUR +-- Perbaikan utama ada di tabel ini. +-- Tidak ada USE db_poverty_mapping lagi. +-- ============================================================ +CREATE TABLE bantuan_tersalur ( + id INT AUTO_INCREMENT PRIMARY KEY, + warga_id INT NOT NULL, + ibadah_id INT DEFAULT NULL, + bencana_id INT DEFAULT NULL, + jenis_bantuan VARCHAR(150) NOT NULL, + jumlah VARCHAR(100) DEFAULT NULL COMMENT 'mis: 50kg beras, Rp500.000', + tanggal DATE NOT NULL, + petugas VARCHAR(150) DEFAULT NULL, + keterangan TEXT DEFAULT NULL, + disalurkan_oleh INT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + status ENUM('Pending','Tersalurkan') NOT NULL DEFAULT 'Tersalurkan', + status_konfirmasi ENUM('Menunggu','Dikonfirmasi','Ditolak') NOT NULL DEFAULT 'Menunggu', + nama_penerima_konfirmasi VARCHAR(150) DEFAULT NULL, + catatan_konfirmasi TEXT DEFAULT NULL, + dikonfirmasi_oleh INT DEFAULT NULL, + tgl_konfirmasi TIMESTAMP NULL DEFAULT NULL, + waktu_konfirmasi TIMESTAMP NULL DEFAULT NULL, + + CONSTRAINT fk_bantuan_warga + FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) + ON DELETE CASCADE, + CONSTRAINT fk_bantuan_ibadah + FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id) + ON DELETE SET NULL, + CONSTRAINT fk_bantuan_bencana + FOREIGN KEY (bencana_id) REFERENCES bencana(id) + ON DELETE SET NULL, + CONSTRAINT fk_bantuan_user + FOREIGN KEY (disalurkan_oleh) REFERENCES users(id) + ON DELETE SET NULL, + CONSTRAINT fk_bantuan_konfirmasi_user + FOREIGN KEY (dikonfirmasi_oleh) REFERENCES users(id) + ON DELETE SET NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- ============================================================ +-- INDEX +-- ============================================================ +CREATE INDEX idx_miskin_coords ON rumah_miskin (lat, lng); +CREATE INDEX idx_ibadah_coords ON rumah_ibadah (lat, lng); +CREATE INDEX idx_miskin_status ON rumah_miskin (status_bantuan); +CREATE INDEX idx_miskin_prioritas ON rumah_miskin (prioritas); +CREATE INDEX idx_bencana_status ON bencana (status); +CREATE INDEX idx_bantuan_status_konfirmasi ON bantuan_tersalur (status_konfirmasi); +CREATE INDEX idx_bantuan_warga ON bantuan_tersalur (warga_id); + +-- ============================================================ +-- DATA DUMMY RINGAN SUPAYA DASHBOARD TIDAK KOSONG +-- ============================================================ +INSERT INTO rumah_ibadah +(nama_ibadah, kategori, alamat, nama_pengurus, no_telp, kuota_bantuan, radius_m, lat, lng, dibuat_oleh) +VALUES +('Masjid Raya Mujahidin', 'Masjid', 'Jl. Jenderal Ahmad Yani, Pontianak', 'Pengurus Demo', '081234567890', 50, 500, -0.0554, 109.3465, 3), +('Masjid Jami Sultan Syarif Abdurrahman', 'Masjid', 'Pontianak Timur', 'Pengurus Demo', '081234567891', 40, 500, -0.0239, 109.3446, 3); + +INSERT INTO rumah_miskin +(nama_kepala_keluarga, nik, tanggal_lahir, jenis_kelamin, jumlah_tanggungan, pendapatan_bulanan, pekerjaan, kondisi_rumah, no_telp, rt_rw, kelurahan, kecamatan, keterangan, status_bantuan, prioritas, lat, lng, didata_oleh) +VALUES +('Budi Santoso', '6171010101010001', '1978-01-10', 'Laki-laki', 4, 800000, 'Buruh Harian', 'Tidak Layak', '081200000001', 'RT 01/RW 02', 'Sungai Jawi', 'Pontianak Kota', 'Data dummy untuk testing', 'Belum Terbantu', 0, -0.0412, 109.3210, 4), +('Siti Aminah', '6171010101010002', '1982-05-12', 'Perempuan', 3, 650000, 'Pedagang Kecil', 'Sangat Tidak Layak', '081200000002', 'RT 03/RW 01', 'Benua Melayu Darat', 'Pontianak Selatan', 'Data dummy untuk testing', 'Belum Terbantu', 1, -0.0550, 109.3450, 4), +('Rahmat Hidayat', '6171010101010003', '1975-09-22', 'Laki-laki', 5, 900000, 'Tidak Tetap', 'Tidak Layak', '081200000003', 'RT 02/RW 04', 'Siantan Hulu', 'Pontianak Utara', 'Data dummy untuk testing', 'Terjangkau', 0, -0.0060, 109.3300, 4); + +INSERT INTO bencana +(nama_bencana, jenis, tanggal, lokasi, deskripsi, status, lat, lng, radius_m, dibuat_oleh) +VALUES +('Banjir Rob Pontianak', 'Banjir', CURDATE(), 'Pontianak Utara', 'Data dummy bencana untuk pengujian sistem', 'Aktif', -0.0060, 109.3300, 700, 2); + +INSERT INTO bencana_terdampak +(bencana_id, warga_id, tingkat, keterangan, ditandai_oleh) +VALUES +(1, 2, 'Sedang', 'Terdampak banjir rob', 4); + +INSERT INTO bantuan_tersalur +(warga_id, ibadah_id, bencana_id, jenis_bantuan, jumlah, tanggal, petugas, keterangan, disalurkan_oleh, status, status_konfirmasi) +VALUES +(1, 1, NULL, 'Paket Sembako', '1 paket', CURDATE(), 'Relawan Demo', 'Data dummy bantuan', 4, 'Tersalurkan', 'Menunggu'), +(3, 2, NULL, 'Beras', '10 kg', CURDATE(), 'Relawan Demo', 'Data dummy bantuan', 4, 'Tersalurkan', 'Dikonfirmasi'); + +-- ============================================================ +-- SELESAI +-- Akun demo: +-- admin / password +-- pemerintah / password +-- pengurus / password +-- relawan / password +-- ============================================================ \ No newline at end of file