mengupdate database.sql
This commit is contained in:
+78
-35
@@ -2,10 +2,6 @@
|
|||||||
-- DATABASE: webgis_sig
|
-- DATABASE: webgis_sig
|
||||||
-- Sistem Manajemen Data Jalan, Parsil Tanah & SPBU
|
-- Sistem Manajemen Data Jalan, Parsil Tanah & SPBU
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
|
|
||||||
CREATE DATABASE IF NOT EXISTS webgis_sig CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
USE webgis_sig;
|
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- TABEL: data_jalan (Line / Polyline)
|
-- TABEL: data_jalan (Line / Polyline)
|
||||||
-- Menyimpan data ruas jalan berdasarkan status jalan
|
-- Menyimpan data ruas jalan berdasarkan status jalan
|
||||||
@@ -14,17 +10,17 @@ USE webgis_sig;
|
|||||||
CREATE TABLE IF NOT EXISTS data_jalan (
|
CREATE TABLE IF NOT EXISTS data_jalan (
|
||||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
nama_jalan VARCHAR(150) NOT NULL COMMENT 'Nama ruas jalan',
|
nama_jalan VARCHAR(150) NOT NULL COMMENT 'Nama ruas jalan',
|
||||||
status_jalan ENUM(
|
status_jalan ENUM (
|
||||||
'Jalan Nasional',
|
'Jalan Nasional',
|
||||||
'Jalan Provinsi',
|
'Jalan Provinsi',
|
||||||
'Jalan Kabupaten'
|
'Jalan Kabupaten'
|
||||||
) NOT NULL COMMENT 'Status / klasifikasi jalan',
|
) NOT NULL COMMENT 'Status / klasifikasi jalan',
|
||||||
panjang_m DECIMAL(12,2) DEFAULT 0.00 COMMENT 'Panjang jalan dalam meter (dihitung otomatis oleh LeafletJS)',
|
panjang_m DECIMAL(12, 2) DEFAULT 0.00 COMMENT 'Panjang jalan dalam meter (dihitung otomatis oleh LeafletJS)',
|
||||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri LineString dalam format GeoJSON',
|
geojson LONGTEXT NOT NULL COMMENT 'Geometri LineString dalam format GeoJSON',
|
||||||
keterangan TEXT DEFAULT NULL COMMENT 'Keterangan tambahan',
|
keterangan TEXT DEFAULT NULL COMMENT 'Keterangan tambahan',
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- TABEL: data_parsil (Polygon)
|
-- TABEL: data_parsil (Polygon)
|
||||||
@@ -34,82 +30,99 @@ CREATE TABLE IF NOT EXISTS data_jalan (
|
|||||||
CREATE TABLE IF NOT EXISTS data_parsil (
|
CREATE TABLE IF NOT EXISTS data_parsil (
|
||||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
nama_parsil VARCHAR(150) NOT NULL COMMENT 'Nama / nomor parsil',
|
nama_parsil VARCHAR(150) NOT NULL COMMENT 'Nama / nomor parsil',
|
||||||
status_hak ENUM(
|
status_hak ENUM (
|
||||||
'Sertifikat Hak Milik',
|
'Sertifikat Hak Milik',
|
||||||
'Sertifikat Hak Guna Bangunan',
|
'Sertifikat Hak Guna Bangunan',
|
||||||
'Sertifikat Hak Guna Usaha',
|
'Sertifikat Hak Guna Usaha',
|
||||||
'Sertifikat Hak Pakai'
|
'Sertifikat Hak Pakai'
|
||||||
) NOT NULL COMMENT 'Status kepemilikan / hak atas tanah',
|
) NOT NULL COMMENT 'Status kepemilikan / hak atas tanah',
|
||||||
luas_m2 DECIMAL(15,2) DEFAULT 0.00 COMMENT 'Luas tanah dalam meter persegi (dihitung otomatis oleh LeafletJS)',
|
luas_m2 DECIMAL(15, 2) DEFAULT 0.00 COMMENT 'Luas tanah dalam meter persegi (dihitung otomatis oleh LeafletJS)',
|
||||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri Polygon dalam format GeoJSON',
|
geojson LONGTEXT NOT NULL COMMENT 'Geometri Polygon dalam format GeoJSON',
|
||||||
pemilik VARCHAR(150) DEFAULT NULL COMMENT 'Nama pemilik (opsional)',
|
pemilik VARCHAR(150) DEFAULT NULL COMMENT 'Nama pemilik (opsional)',
|
||||||
keterangan TEXT DEFAULT NULL COMMENT 'Keterangan tambahan',
|
keterangan TEXT DEFAULT NULL COMMENT 'Keterangan tambahan',
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- DATA CONTOH – Jalan
|
-- DATA CONTOH – Jalan
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
INSERT INTO data_jalan (nama_jalan, status_jalan, panjang_m, geojson, keterangan) VALUES
|
INSERT INTO
|
||||||
(
|
data_jalan (
|
||||||
|
nama_jalan,
|
||||||
|
status_jalan,
|
||||||
|
panjang_m,
|
||||||
|
geojson,
|
||||||
|
keterangan
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
'Jl. Sudirman',
|
'Jl. Sudirman',
|
||||||
'Jalan Nasional',
|
'Jalan Nasional',
|
||||||
1250.50,
|
1250.50,
|
||||||
'{"type":"LineString","coordinates":[[106.8272,-6.2088],[106.8290,-6.2075],[106.8310,-6.2060],[106.8330,-6.2045]]}',
|
'{"type":"LineString","coordinates":[[106.8272,-6.2088],[106.8290,-6.2075],[106.8310,-6.2060],[106.8330,-6.2045]]}',
|
||||||
'Jalan protokol pusat kota'
|
'Jalan protokol pusat kota'
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'Jl. Gatot Subroto',
|
'Jl. Gatot Subroto',
|
||||||
'Jalan Provinsi',
|
'Jalan Provinsi',
|
||||||
980.00,
|
980.00,
|
||||||
'{"type":"LineString","coordinates":[[106.8200,-6.2100],[106.8220,-6.2095],[106.8240,-6.2090],[106.8260,-6.2085]]}',
|
'{"type":"LineString","coordinates":[[106.8200,-6.2100],[106.8220,-6.2095],[106.8240,-6.2090],[106.8260,-6.2085]]}',
|
||||||
'Penghubung antar kecamatan'
|
'Penghubung antar kecamatan'
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'Jl. Pramuka',
|
'Jl. Pramuka',
|
||||||
'Jalan Kabupaten',
|
'Jalan Kabupaten',
|
||||||
620.75,
|
620.75,
|
||||||
'{"type":"LineString","coordinates":[[106.8150,-6.2180],[106.8160,-6.2170],[106.8175,-6.2160],[106.8185,-6.2150]]}',
|
'{"type":"LineString","coordinates":[[106.8150,-6.2180],[106.8160,-6.2170],[106.8175,-6.2160],[106.8185,-6.2150]]}',
|
||||||
'Jalan lingkungan kabupaten'
|
'Jalan lingkungan kabupaten'
|
||||||
);
|
);
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- DATA CONTOH – Parsil Tanah
|
-- DATA CONTOH – Parsil Tanah
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
INSERT INTO data_parsil (nama_parsil, status_hak, luas_m2, geojson, pemilik, keterangan) VALUES
|
INSERT INTO
|
||||||
(
|
data_parsil (
|
||||||
|
nama_parsil,
|
||||||
|
status_hak,
|
||||||
|
luas_m2,
|
||||||
|
geojson,
|
||||||
|
pemilik,
|
||||||
|
keterangan
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
'Parsil A-001',
|
'Parsil A-001',
|
||||||
'Sertifikat Hak Milik',
|
'Sertifikat Hak Milik',
|
||||||
1200.00,
|
1200.00,
|
||||||
'{"type":"Polygon","coordinates":[[[106.8200,-6.2000],[106.8210,-6.2000],[106.8210,-6.2010],[106.8200,-6.2010],[106.8200,-6.2000]]]}',
|
'{"type":"Polygon","coordinates":[[[106.8200,-6.2000],[106.8210,-6.2000],[106.8210,-6.2010],[106.8200,-6.2010],[106.8200,-6.2000]]]}',
|
||||||
'Budi Santoso',
|
'Budi Santoso',
|
||||||
'Tanah kavling perumahan'
|
'Tanah kavling perumahan'
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'Parsil B-002',
|
'Parsil B-002',
|
||||||
'Sertifikat Hak Guna Bangunan',
|
'Sertifikat Hak Guna Bangunan',
|
||||||
850.50,
|
850.50,
|
||||||
'{"type":"Polygon","coordinates":[[[106.8220,-6.2000],[106.8230,-6.2000],[106.8230,-6.2008],[106.8220,-6.2008],[106.8220,-6.2000]]]}',
|
'{"type":"Polygon","coordinates":[[[106.8220,-6.2000],[106.8230,-6.2000],[106.8230,-6.2008],[106.8220,-6.2008],[106.8220,-6.2000]]]}',
|
||||||
'PT. Maju Bersama',
|
'PT. Maju Bersama',
|
||||||
'Kavling komersial'
|
'Kavling komersial'
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'Parsil C-003',
|
'Parsil C-003',
|
||||||
'Sertifikat Hak Guna Usaha',
|
'Sertifikat Hak Guna Usaha',
|
||||||
2500.00,
|
2500.00,
|
||||||
'{"type":"Polygon","coordinates":[[[106.8240,-6.1990],[106.8260,-6.1990],[106.8260,-6.2010],[106.8240,-6.2010],[106.8240,-6.1990]]]}',
|
'{"type":"Polygon","coordinates":[[[106.8240,-6.1990],[106.8260,-6.1990],[106.8260,-6.2010],[106.8240,-6.2010],[106.8240,-6.1990]]]}',
|
||||||
'CV. Tani Makmur',
|
'CV. Tani Makmur',
|
||||||
'Lahan pertanian/perkebunan'
|
'Lahan pertanian/perkebunan'
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'Parsil D-004',
|
'Parsil D-004',
|
||||||
'Sertifikat Hak Pakai',
|
'Sertifikat Hak Pakai',
|
||||||
4000.00,
|
4000.00,
|
||||||
'{"type":"Polygon","coordinates":[[[106.8270,-6.1985],[106.8295,-6.1985],[106.8295,-6.2005],[106.8270,-6.2005],[106.8270,-6.1985]]]}',
|
'{"type":"Polygon","coordinates":[[[106.8270,-6.1985],[106.8295,-6.1985],[106.8295,-6.2005],[106.8270,-6.2005],[106.8270,-6.1985]]]}',
|
||||||
'Pemerintah Kota',
|
'Pemerintah Kota',
|
||||||
'Lahan fasilitas umum'
|
'Lahan fasilitas umum'
|
||||||
);
|
);
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- TABEL: data_spbu (Point)
|
-- TABEL: data_spbu (Point)
|
||||||
@@ -120,19 +133,49 @@ CREATE TABLE IF NOT EXISTS data_spbu (
|
|||||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
nama_spbu VARCHAR(150) NOT NULL COMMENT 'Nama SPBU / nama cabang',
|
nama_spbu VARCHAR(150) NOT NULL COMMENT 'Nama SPBU / nama cabang',
|
||||||
telepon VARCHAR(20) DEFAULT NULL COMMENT 'Nomor telepon SPBU',
|
telepon VARCHAR(20) DEFAULT NULL COMMENT 'Nomor telepon SPBU',
|
||||||
buka_24jam TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = buka 24 jam (marker hijau), 0 = tidak (marker merah)',
|
buka_24jam TINYINT (1) NOT NULL DEFAULT 0 COMMENT '1 = buka 24 jam (marker hijau), 0 = tidak (marker merah)',
|
||||||
lat DECIMAL(10,7) NOT NULL COMMENT 'Latitude titik SPBU',
|
lat DECIMAL(10, 7) NOT NULL COMMENT 'Latitude titik SPBU',
|
||||||
lng DECIMAL(10,7) NOT NULL COMMENT 'Longitude titik SPBU',
|
lng DECIMAL(10, 7) NOT NULL COMMENT 'Longitude titik SPBU',
|
||||||
geojson LONGTEXT NOT NULL COMMENT 'Geometri Point dalam format GeoJSON',
|
geojson LONGTEXT NOT NULL COMMENT 'Geometri Point dalam format GeoJSON',
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- DATA CONTOH – SPBU di Pontianak
|
-- DATA CONTOH – SPBU di Pontianak
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
INSERT INTO data_spbu (nama_spbu, telepon, buka_24jam, lat, lng, geojson) VALUES
|
INSERT INTO
|
||||||
('SPBU Jl. Ahmad Yani', '0561-123456', 1, -0.0200, 109.3300, '{"type":"Point","coordinates":[109.3300,-0.0200]}'),
|
data_spbu (nama_spbu, telepon, buka_24jam, lat, lng, geojson)
|
||||||
('SPBU Jl. Gajah Mada', '0561-654321', 0, -0.0350, 109.3200, '{"type":"Point","coordinates":[109.3200,-0.0350]}'),
|
VALUES
|
||||||
('SPBU Jl. Tanjungpura', '0561-789012', 1, -0.0100, 109.3450, '{"type":"Point","coordinates":[109.3450,-0.0100]}'),
|
(
|
||||||
('SPBU Jl. Sutan Syahrir','0561-345678', 0, -0.0480, 109.3380, '{"type":"Point","coordinates":[109.3380,-0.0480]}');
|
'SPBU Jl. Ahmad Yani',
|
||||||
|
'0561-123456',
|
||||||
|
1,
|
||||||
|
-0.0200,
|
||||||
|
109.3300,
|
||||||
|
'{"type":"Point","coordinates":[109.3300,-0.0200]}'
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'SPBU Jl. Gajah Mada',
|
||||||
|
'0561-654321',
|
||||||
|
0,
|
||||||
|
-0.0350,
|
||||||
|
109.3200,
|
||||||
|
'{"type":"Point","coordinates":[109.3200,-0.0350]}'
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'SPBU Jl. Tanjungpura',
|
||||||
|
'0561-789012',
|
||||||
|
1,
|
||||||
|
-0.0100,
|
||||||
|
109.3450,
|
||||||
|
'{"type":"Point","coordinates":[109.3450,-0.0100]}'
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'SPBU Jl. Sutan Syahrir',
|
||||||
|
'0561-345678',
|
||||||
|
0,
|
||||||
|
-0.0480,
|
||||||
|
109.3380,
|
||||||
|
'{"type":"Point","coordinates":[109.3380,-0.0480]}'
|
||||||
|
);
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
// Konfigurasi database
|
// Konfigurasi database
|
||||||
define('DB_HOST', 'vg4so4ccs0444o4cgkssgos8');
|
define('DB_HOST', 'vg4so4ccs0444o4cgkssgos8');
|
||||||
|
define('DB_PORT', 3306);
|
||||||
define('DB_NAME', 'default');
|
define('DB_NAME', 'default');
|
||||||
define('DB_USER', 'mysql');
|
define('DB_USER', 'mysql');
|
||||||
define('DB_PASS', 'tg9lvPlr4hgUhgtT7aPq9XelkCEvvMGtsoV8eB4dD5FAkz891PwkJT340xmaEWxL');
|
define('DB_PASS', 'tg9lvPlr4hgUhgtT7aPq9XelkCEvvMGtsoV8eB4dD5FAkz891PwkJT340xmaEWxL');
|
||||||
@@ -22,13 +23,14 @@ if (session_status() === PHP_SESSION_NONE) {
|
|||||||
// ── Koneksi PDO ──────────────────────────────────────────────
|
// ── Koneksi PDO ──────────────────────────────────────────────
|
||||||
try {
|
try {
|
||||||
$pdo = new PDO(
|
$pdo = new PDO(
|
||||||
"mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET,
|
"mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET,
|
||||||
DB_USER,
|
DB_USER,
|
||||||
DB_PASS,
|
DB_PASS,
|
||||||
[
|
[
|
||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
PDO::ATTR_EMULATE_PREPARES => false,
|
PDO::ATTR_EMULATE_PREPARES => false,
|
||||||
|
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
} catch (PDOException $e) {
|
} catch (PDOException $e) {
|
||||||
@@ -61,7 +63,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
|||||||
* Kirim respon JSON standar lalu hentikan eksekusi.
|
* Kirim respon JSON standar lalu hentikan eksekusi.
|
||||||
* Format: {"success": true/false, "data": ..., "message": "..."}
|
* Format: {"success": true/false, "data": ..., "message": "..."}
|
||||||
*/
|
*/
|
||||||
function jsonResponse($data = null, string $message = '', bool $success = true, int $httpCode = 200, array $extra = []): void {
|
function jsonResponse($data = null, string $message = '', bool $success = true, int $httpCode = 200, array $extra = []): void
|
||||||
|
{
|
||||||
http_response_code($httpCode);
|
http_response_code($httpCode);
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
$response = [
|
$response = [
|
||||||
@@ -80,14 +83,16 @@ function jsonResponse($data = null, string $message = '', bool $success = true,
|
|||||||
/**
|
/**
|
||||||
* Bersihkan input string dari tag HTML.
|
* Bersihkan input string dari tag HTML.
|
||||||
*/
|
*/
|
||||||
function clean(string $value): string {
|
function clean(string $value): string
|
||||||
|
{
|
||||||
return htmlspecialchars(strip_tags(trim($value)), ENT_QUOTES, 'UTF-8');
|
return htmlspecialchars(strip_tags(trim($value)), ENT_QUOTES, 'UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hitung jarak Haversine antara dua koordinat dalam kilometer.
|
* Hitung jarak Haversine antara dua koordinat dalam kilometer.
|
||||||
*/
|
*/
|
||||||
function haversine(float $lat1, float $lng1, float $lat2, float $lng2): float {
|
function haversine(float $lat1, float $lng1, float $lat2, float $lng2): float
|
||||||
|
{
|
||||||
$R = 6371; // Radius bumi dalam km
|
$R = 6371; // Radius bumi dalam km
|
||||||
$dLat = deg2rad($lat2 - $lat1);
|
$dLat = deg2rad($lat2 - $lat1);
|
||||||
$dLng = deg2rad($lng2 - $lng1);
|
$dLng = deg2rad($lng2 - $lng1);
|
||||||
@@ -102,7 +107,8 @@ function haversine(float $lat1, float $lng1, float $lat2, float $lng2): float {
|
|||||||
* Auto-assign: cari rumah ibadah terdekat yang radius-nya mencakup lokasi KK.
|
* Auto-assign: cari rumah ibadah terdekat yang radius-nya mencakup lokasi KK.
|
||||||
* Mengembalikan ['rumah_ibadah_id' => int|null, 'jarak_km' => float|null]
|
* Mengembalikan ['rumah_ibadah_id' => int|null, 'jarak_km' => float|null]
|
||||||
*/
|
*/
|
||||||
function autoAssign(PDO $pdo, float $lat, float $lng): array {
|
function autoAssign(PDO $pdo, float $lat, float $lng): array
|
||||||
|
{
|
||||||
$result = ['rumah_ibadah_id' => null, 'jarak_km' => null];
|
$result = ['rumah_ibadah_id' => null, 'jarak_km' => null];
|
||||||
|
|
||||||
$stmt = $pdo->query("SELECT id, lat, lng, radius_km FROM rumah_ibadah");
|
$stmt = $pdo->query("SELECT id, lat, lng, radius_km FROM rumah_ibadah");
|
||||||
@@ -132,7 +138,8 @@ function autoAssign(PDO $pdo, float $lat, float $lng): array {
|
|||||||
* Cek apakah user sudah login. Jika belum, kirim 401.
|
* Cek apakah user sudah login. Jika belum, kirim 401.
|
||||||
* Mengembalikan data session user.
|
* Mengembalikan data session user.
|
||||||
*/
|
*/
|
||||||
function requireLogin(): array {
|
function requireLogin(): array
|
||||||
|
{
|
||||||
if (empty($_SESSION['user'])) {
|
if (empty($_SESSION['user'])) {
|
||||||
jsonResponse(null, 'Tidak diizinkan. Silakan login terlebih dahulu.', false, 401);
|
jsonResponse(null, 'Tidak diizinkan. Silakan login terlebih dahulu.', false, 401);
|
||||||
}
|
}
|
||||||
@@ -143,7 +150,8 @@ function requireLogin(): array {
|
|||||||
* Cek apakah role user termasuk dalam daftar yang diizinkan.
|
* Cek apakah role user termasuk dalam daftar yang diizinkan.
|
||||||
* Jika tidak, kirim 403.
|
* Jika tidak, kirim 403.
|
||||||
*/
|
*/
|
||||||
function requireRole(array $allowedRoles): array {
|
function requireRole(array $allowedRoles): array
|
||||||
|
{
|
||||||
$user = requireLogin();
|
$user = requireLogin();
|
||||||
if (!in_array($user['role'], $allowedRoles)) {
|
if (!in_array($user['role'], $allowedRoles)) {
|
||||||
jsonResponse(null, 'Akses ditolak. Role Anda tidak memiliki izin.', false, 403);
|
jsonResponse(null, 'Akses ditolak. Role Anda tidak memiliki izin.', false, 403);
|
||||||
@@ -155,7 +163,8 @@ function requireRole(array $allowedRoles): array {
|
|||||||
* Blokir aksi tulis (POST/PUT/DELETE) untuk role walikota.
|
* Blokir aksi tulis (POST/PUT/DELETE) untuk role walikota.
|
||||||
* Walikota hanya boleh GET.
|
* Walikota hanya boleh GET.
|
||||||
*/
|
*/
|
||||||
function blockWalikotaWrite(): void {
|
function blockWalikotaWrite(): void
|
||||||
|
{
|
||||||
if (!empty($_SESSION['user']) && $_SESSION['user']['role'] === 'walikota') {
|
if (!empty($_SESSION['user']) && $_SESSION['user']['role'] === 'walikota') {
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if (in_array($method, ['POST', 'PUT', 'DELETE'])) {
|
if (in_array($method, ['POST', 'PUT', 'DELETE'])) {
|
||||||
@@ -168,7 +177,8 @@ function blockWalikotaWrite(): void {
|
|||||||
* Generate kode pengurus dengan format: RI-[JENIS 3 HURUF]-[RANDOM 4 DIGIT]
|
* Generate kode pengurus dengan format: RI-[JENIS 3 HURUF]-[RANDOM 4 DIGIT]
|
||||||
* Contoh: RI-MSJ-4821, RI-GRJ-7153
|
* Contoh: RI-MSJ-4821, RI-GRJ-7153
|
||||||
*/
|
*/
|
||||||
function generateKodePengurus(PDO $pdo, string $jenis): string {
|
function generateKodePengurus(PDO $pdo, string $jenis): string
|
||||||
|
{
|
||||||
// Mapping jenis ke 3 huruf
|
// Mapping jenis ke 3 huruf
|
||||||
$map = [
|
$map = [
|
||||||
'Masjid' => 'MSJ',
|
'Masjid' => 'MSJ',
|
||||||
@@ -199,7 +209,8 @@ function generateKodePengurus(PDO $pdo, string $jenis): string {
|
|||||||
* Cek rate limit untuk IP tertentu. Maks 5 submit per jam.
|
* Cek rate limit untuk IP tertentu. Maks 5 submit per jam.
|
||||||
* Mengembalikan true jika masih diizinkan, false jika melebihi batas.
|
* Mengembalikan true jika masih diizinkan, false jika melebihi batas.
|
||||||
*/
|
*/
|
||||||
function checkRateLimit(PDO $pdo, string $ip): bool {
|
function checkRateLimit(PDO $pdo, string $ip): bool
|
||||||
|
{
|
||||||
// Hapus record yang lebih dari 1 jam
|
// Hapus record yang lebih dari 1 jam
|
||||||
$pdo->prepare("DELETE FROM rate_limit WHERE created_at < NOW() - INTERVAL 1 HOUR")->execute();
|
$pdo->prepare("DELETE FROM rate_limit WHERE created_at < NOW() - INTERVAL 1 HOUR")->execute();
|
||||||
|
|
||||||
@@ -222,7 +233,8 @@ function checkRateLimit(PDO $pdo, string $ip): bool {
|
|||||||
/**
|
/**
|
||||||
* Handle upload file foto. Mengembalikan path relatif file atau null.
|
* Handle upload file foto. Mengembalikan path relatif file atau null.
|
||||||
*/
|
*/
|
||||||
function handleUpload(string $fieldName): ?string {
|
function handleUpload(string $fieldName): ?string
|
||||||
|
{
|
||||||
if (!isset($_FILES[$fieldName]) || $_FILES[$fieldName]['error'] !== UPLOAD_ERR_OK) {
|
if (!isset($_FILES[$fieldName]) || $_FILES[$fieldName]['error'] !== UPLOAD_ERR_OK) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -259,7 +271,8 @@ function handleUpload(string $fieldName): ?string {
|
|||||||
/**
|
/**
|
||||||
* Dapatkan IP address client (mendukung proxy).
|
* Dapatkan IP address client (mendukung proxy).
|
||||||
*/
|
*/
|
||||||
function getClientIP(): string {
|
function getClientIP(): string
|
||||||
|
{
|
||||||
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
||||||
return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
|
return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,17 @@
|
|||||||
-- DATABASE: webgis_rumah_ibadah
|
-- DATABASE: webgis_rumah_ibadah
|
||||||
-- WebGIS Pontianak — Pengentasan Kemiskinan Berbasis Rumah Ibadah
|
-- WebGIS Pontianak — Pengentasan Kemiskinan Berbasis Rumah Ibadah
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
|
|
||||||
CREATE DATABASE IF NOT EXISTS webgis_rumah_ibadah
|
|
||||||
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
USE webgis_rumah_ibadah;
|
|
||||||
|
|
||||||
-- Hapus tabel lama (urutan sesuai dependensi FK)
|
-- Hapus tabel lama (urutan sesuai dependensi FK)
|
||||||
DROP TABLE IF EXISTS histori_bantuan;
|
DROP TABLE IF EXISTS histori_bantuan;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS laporan_masyarakat;
|
DROP TABLE IF EXISTS laporan_masyarakat;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS keluarga_miskin;
|
DROP TABLE IF EXISTS keluarga_miskin;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS users;
|
DROP TABLE IF EXISTS users;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS rumah_ibadah;
|
DROP TABLE IF EXISTS rumah_ibadah;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS rate_limit;
|
DROP TABLE IF EXISTS rate_limit;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
@@ -22,19 +22,30 @@ DROP TABLE IF EXISTS rate_limit;
|
|||||||
CREATE TABLE rumah_ibadah (
|
CREATE TABLE rumah_ibadah (
|
||||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
nama VARCHAR(200) NOT NULL COMMENT 'Nama rumah ibadah',
|
nama VARCHAR(200) NOT NULL COMMENT 'Nama rumah ibadah',
|
||||||
jenis ENUM('Masjid','Gereja','Pura','Vihara','Klenteng','Lainnya')
|
jenis ENUM (
|
||||||
NOT NULL COMMENT 'Jenis rumah ibadah',
|
'Masjid',
|
||||||
|
'Gereja',
|
||||||
|
'Pura',
|
||||||
|
'Vihara',
|
||||||
|
'Klenteng',
|
||||||
|
'Lainnya'
|
||||||
|
) NOT NULL COMMENT 'Jenis rumah ibadah',
|
||||||
alamat TEXT NOT NULL COMMENT 'Alamat lengkap',
|
alamat TEXT NOT NULL COMMENT 'Alamat lengkap',
|
||||||
lat DECIMAL(10,7) NOT NULL COMMENT 'Latitude',
|
lat DECIMAL(10, 7) NOT NULL COMMENT 'Latitude',
|
||||||
lng DECIMAL(10,7) NOT NULL COMMENT 'Longitude',
|
lng DECIMAL(10, 7) NOT NULL COMMENT 'Longitude',
|
||||||
radius_km FLOAT NOT NULL DEFAULT 2.0 COMMENT 'Radius cakupan (km)',
|
radius_km FLOAT NOT NULL DEFAULT 2.0 COMMENT 'Radius cakupan (km)',
|
||||||
kode_pengurus VARCHAR(20) NULL UNIQUE COMMENT 'Kode unik login pengurus, format RI-XXX-9999',
|
kode_pengurus VARCHAR(20) NULL UNIQUE COMMENT 'Kode unik login pengurus, format RI-XXX-9999',
|
||||||
password_pengurus VARCHAR(255) NULL COMMENT 'Password pengurus (hashed)',
|
password_pengurus VARCHAR(255) NULL COMMENT 'Password pengurus (hashed)',
|
||||||
kecamatan ENUM('Pontianak Utara','Pontianak Selatan','Pontianak Timur',
|
kecamatan ENUM (
|
||||||
'Pontianak Barat','Pontianak Tenggara','Pontianak Kota')
|
'Pontianak Utara',
|
||||||
NOT NULL COMMENT 'Kecamatan lokasi',
|
'Pontianak Selatan',
|
||||||
|
'Pontianak Timur',
|
||||||
|
'Pontianak Barat',
|
||||||
|
'Pontianak Tenggara',
|
||||||
|
'Pontianak Kota'
|
||||||
|
) NOT NULL COMMENT 'Kecamatan lokasi',
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- TABEL: users
|
-- TABEL: users
|
||||||
@@ -45,12 +56,11 @@ CREATE TABLE users (
|
|||||||
nama VARCHAR(150) NOT NULL COMMENT 'Nama lengkap pengguna',
|
nama VARCHAR(150) NOT NULL COMMENT 'Nama lengkap pengguna',
|
||||||
username VARCHAR(100) NOT NULL UNIQUE COMMENT 'Username login',
|
username VARCHAR(100) NOT NULL UNIQUE COMMENT 'Username login',
|
||||||
password VARCHAR(255) NOT NULL COMMENT 'Password ter-hash (bcrypt)',
|
password VARCHAR(255) NOT NULL COMMENT 'Password ter-hash (bcrypt)',
|
||||||
role ENUM('admin','pengurus','walikota')
|
role ENUM ('admin', 'pengurus', 'walikota') NOT NULL DEFAULT 'pengurus' COMMENT 'Role pengguna',
|
||||||
NOT NULL DEFAULT 'pengurus' COMMENT 'Role pengguna',
|
|
||||||
rumah_ibadah_id INT DEFAULT NULL COMMENT 'FK ke rumah_ibadah (hanya untuk pengurus)',
|
rumah_ibadah_id INT DEFAULT NULL COMMENT 'FK ke rumah_ibadah (hanya untuk pengurus)',
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL
|
FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah (id) ON DELETE SET NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- TABEL: keluarga_miskin
|
-- TABEL: keluarga_miskin
|
||||||
@@ -61,26 +71,40 @@ CREATE TABLE keluarga_miskin (
|
|||||||
nik VARCHAR(20) NOT NULL UNIQUE COMMENT 'NIK Kepala Keluarga',
|
nik VARCHAR(20) NOT NULL UNIQUE COMMENT 'NIK Kepala Keluarga',
|
||||||
nama_kepala_keluarga VARCHAR(200) NOT NULL COMMENT 'Nama Kepala Keluarga',
|
nama_kepala_keluarga VARCHAR(200) NOT NULL COMMENT 'Nama Kepala Keluarga',
|
||||||
tanggal_lahir DATE NULL COMMENT 'Tanggal lahir KK',
|
tanggal_lahir DATE NULL COMMENT 'Tanggal lahir KK',
|
||||||
pendidikan ENUM('Tidak Sekolah','SD','SMP','SMA','D3','S1','S2/S3')
|
pendidikan ENUM (
|
||||||
NOT NULL DEFAULT 'Tidak Sekolah',
|
'Tidak Sekolah',
|
||||||
|
'SD',
|
||||||
|
'SMP',
|
||||||
|
'SMA',
|
||||||
|
'D3',
|
||||||
|
'S1',
|
||||||
|
'S2/S3'
|
||||||
|
) NOT NULL DEFAULT 'Tidak Sekolah',
|
||||||
jumlah_anggota INT NOT NULL DEFAULT 1 COMMENT 'Jumlah anggota keluarga',
|
jumlah_anggota INT NOT NULL DEFAULT 1 COMMENT 'Jumlah anggota keluarga',
|
||||||
alamat TEXT NOT NULL COMMENT 'Alamat lengkap',
|
alamat TEXT NOT NULL COMMENT 'Alamat lengkap',
|
||||||
kecamatan ENUM('Pontianak Utara','Pontianak Selatan','Pontianak Timur',
|
kecamatan ENUM (
|
||||||
'Pontianak Barat','Pontianak Tenggara','Pontianak Kota')
|
'Pontianak Utara',
|
||||||
NOT NULL,
|
'Pontianak Selatan',
|
||||||
lat DECIMAL(10,7) NOT NULL,
|
'Pontianak Timur',
|
||||||
lng DECIMAL(10,7) NOT NULL,
|
'Pontianak Barat',
|
||||||
tingkat_kemiskinan ENUM('Sangat Miskin','Miskin','Hampir Miskin')
|
'Pontianak Tenggara',
|
||||||
NOT NULL DEFAULT 'Miskin',
|
'Pontianak Kota'
|
||||||
status_dtks ENUM('Terdaftar DTKS','Belum DTKS','Sedang Diusulkan')
|
) NOT NULL,
|
||||||
NOT NULL DEFAULT 'Belum DTKS',
|
lat DECIMAL(10, 7) NOT NULL,
|
||||||
|
lng DECIMAL(10, 7) NOT NULL,
|
||||||
|
tingkat_kemiskinan ENUM ('Sangat Miskin', 'Miskin', 'Hampir Miskin') NOT NULL DEFAULT 'Miskin',
|
||||||
|
status_dtks ENUM (
|
||||||
|
'Terdaftar DTKS',
|
||||||
|
'Belum DTKS',
|
||||||
|
'Sedang Diusulkan'
|
||||||
|
) NOT NULL DEFAULT 'Belum DTKS',
|
||||||
riwayat_penyakit JSON NULL COMMENT 'Array penyakit: Stunting, TBC, Hipertensi, dll',
|
riwayat_penyakit JSON NULL COMMENT 'Array penyakit: Stunting, TBC, Hipertensi, dll',
|
||||||
rumah_ibadah_id INT DEFAULT NULL COMMENT 'Auto-assign ke RI terdekat',
|
rumah_ibadah_id INT DEFAULT NULL COMMENT 'Auto-assign ke RI terdekat',
|
||||||
jarak_ke_ibadah FLOAT DEFAULT NULL COMMENT 'Jarak ke RI terdekat (km)',
|
jarak_ke_ibadah FLOAT DEFAULT NULL COMMENT 'Jarak ke RI terdekat (km)',
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL
|
FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah (id) ON DELETE SET NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- TABEL: laporan_masyarakat
|
-- TABEL: laporan_masyarakat
|
||||||
@@ -93,19 +117,18 @@ CREATE TABLE laporan_masyarakat (
|
|||||||
nama_pelapor VARCHAR(150) NULL COMMENT 'Boleh anonim (null)',
|
nama_pelapor VARCHAR(150) NULL COMMENT 'Boleh anonim (null)',
|
||||||
no_hp VARCHAR(20) NULL,
|
no_hp VARCHAR(20) NULL,
|
||||||
alamat_terlapor TEXT NOT NULL COMMENT 'Alamat yang dilaporkan',
|
alamat_terlapor TEXT NOT NULL COMMENT 'Alamat yang dilaporkan',
|
||||||
lat DECIMAL(10,7) NOT NULL,
|
lat DECIMAL(10, 7) NOT NULL,
|
||||||
lng DECIMAL(10,7) NOT NULL,
|
lng DECIMAL(10, 7) NOT NULL,
|
||||||
deskripsi TEXT NOT NULL COMMENT 'Deskripsi laporan',
|
deskripsi TEXT NOT NULL COMMENT 'Deskripsi laporan',
|
||||||
foto VARCHAR(255) NULL COMMENT 'Path file foto',
|
foto VARCHAR(255) NULL COMMENT 'Path file foto',
|
||||||
status ENUM('Baru','Diverifikasi','Ditolak')
|
status ENUM ('Baru', 'Diverifikasi', 'Ditolak') NOT NULL DEFAULT 'Baru',
|
||||||
NOT NULL DEFAULT 'Baru',
|
|
||||||
alasan_tolak TEXT NULL COMMENT 'Alasan jika ditolak',
|
alasan_tolak TEXT NULL COMMENT 'Alasan jika ditolak',
|
||||||
ditangani_oleh INT NULL COMMENT 'FK ke users.id',
|
ditangani_oleh INT NULL COMMENT 'FK ke users.id',
|
||||||
converted_to_kk_id INT NULL COMMENT 'FK ke keluarga_miskin.id jika dikonversi',
|
converted_to_kk_id INT NULL COMMENT 'FK ke keluarga_miskin.id jika dikonversi',
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
FOREIGN KEY (ditangani_oleh) REFERENCES users(id) ON DELETE SET NULL,
|
FOREIGN KEY (ditangani_oleh) REFERENCES users (id) ON DELETE SET NULL,
|
||||||
FOREIGN KEY (converted_to_kk_id) REFERENCES keluarga_miskin(id) ON DELETE SET NULL
|
FOREIGN KEY (converted_to_kk_id) REFERENCES keluarga_miskin (id) ON DELETE SET NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- TABEL: histori_bantuan
|
-- TABEL: histori_bantuan
|
||||||
@@ -114,20 +137,26 @@ CREATE TABLE laporan_masyarakat (
|
|||||||
CREATE TABLE histori_bantuan (
|
CREATE TABLE histori_bantuan (
|
||||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
kk_id INT NOT NULL COMMENT 'FK ke keluarga_miskin',
|
kk_id INT NOT NULL COMMENT 'FK ke keluarga_miskin',
|
||||||
jenis_bantuan ENUM('PKH','BPNT/Sembako','Beras Bansos','KIS-PBI',
|
jenis_bantuan ENUM (
|
||||||
'Bansos Tunai Pemkot','Rutilahu','PMT Stunting',
|
'PKH',
|
||||||
'CSR Swasta','Lainnya')
|
'BPNT/Sembako',
|
||||||
NOT NULL,
|
'Beras Bansos',
|
||||||
|
'KIS-PBI',
|
||||||
|
'Bansos Tunai Pemkot',
|
||||||
|
'Rutilahu',
|
||||||
|
'PMT Stunting',
|
||||||
|
'CSR Swasta',
|
||||||
|
'Lainnya'
|
||||||
|
) NOT NULL,
|
||||||
nominal BIGINT NOT NULL DEFAULT 0 COMMENT 'Nominal dalam rupiah (0 jika non-uang)',
|
nominal BIGINT NOT NULL DEFAULT 0 COMMENT 'Nominal dalam rupiah (0 jika non-uang)',
|
||||||
keterangan TEXT NULL COMMENT 'Catatan bebas: 10 kg beras, 3 karung, dll',
|
keterangan TEXT NULL COMMENT 'Catatan bebas: 10 kg beras, 3 karung, dll',
|
||||||
tanggal_penyaluran DATE NOT NULL,
|
tanggal_penyaluran DATE NOT NULL,
|
||||||
sumber_dana ENUM('APBN','APBD','CSR','Lainnya')
|
sumber_dana ENUM ('APBN', 'APBD', 'CSR', 'Lainnya') NOT NULL DEFAULT 'APBD',
|
||||||
NOT NULL DEFAULT 'APBD',
|
|
||||||
penanggung_jawab INT NOT NULL COMMENT 'FK ke users.id',
|
penanggung_jawab INT NOT NULL COMMENT 'FK ke users.id',
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
FOREIGN KEY (kk_id) REFERENCES keluarga_miskin(id) ON DELETE CASCADE,
|
FOREIGN KEY (kk_id) REFERENCES keluarga_miskin (id) ON DELETE CASCADE,
|
||||||
FOREIGN KEY (penanggung_jawab) REFERENCES users(id) ON DELETE CASCADE
|
FOREIGN KEY (penanggung_jawab) REFERENCES users (id) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- TABEL: rate_limit
|
-- TABEL: rate_limit
|
||||||
@@ -138,61 +167,94 @@ CREATE TABLE rate_limit (
|
|||||||
ip_address VARCHAR(45) NOT NULL,
|
ip_address VARCHAR(45) NOT NULL,
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
INDEX idx_ip_time (ip_address, created_at)
|
INDEX idx_ip_time (ip_address, created_at)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- DATA SEED: Rumah Ibadah (2 data)
|
-- DATA SEED: Rumah Ibadah (2 data)
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
INSERT INTO rumah_ibadah (nama, jenis, alamat, lat, lng, radius_km, kode_pengurus, password_pengurus, kecamatan) VALUES
|
INSERT INTO
|
||||||
(
|
rumah_ibadah (
|
||||||
|
nama,
|
||||||
|
jenis,
|
||||||
|
alamat,
|
||||||
|
lat,
|
||||||
|
lng,
|
||||||
|
radius_km,
|
||||||
|
kode_pengurus,
|
||||||
|
password_pengurus,
|
||||||
|
kecamatan
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
'Masjid Raya Mujahidin',
|
'Masjid Raya Mujahidin',
|
||||||
'Masjid',
|
'Masjid',
|
||||||
'Jl. Ahmad Yani No. 1, Pontianak Tenggara',
|
'Jl. Ahmad Yani No. 1, Pontianak Tenggara',
|
||||||
-0.0263330, 109.3425200,
|
-0.0263330,
|
||||||
|
109.3425200,
|
||||||
2.5,
|
2.5,
|
||||||
'RI-MSJ-4821',
|
'RI-MSJ-4821',
|
||||||
-- password: pengurus123
|
-- password: pengurus123
|
||||||
'$2y$10$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG',
|
'$2y$10$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG',
|
||||||
'Pontianak Tenggara'
|
'Pontianak Tenggara'
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'Gereja Katedral Santo Yosef',
|
'Gereja Katedral Santo Yosef',
|
||||||
'Gereja',
|
'Gereja',
|
||||||
'Jl. Diponegoro No. 120, Pontianak Kota',
|
'Jl. Diponegoro No. 120, Pontianak Kota',
|
||||||
-0.0380000, 109.3422000,
|
-0.0380000,
|
||||||
|
109.3422000,
|
||||||
2.0,
|
2.0,
|
||||||
'RI-GRJ-7153',
|
'RI-GRJ-7153',
|
||||||
-- password: pengurus123
|
-- password: pengurus123
|
||||||
'$2y$10$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG',
|
'$2y$10$EQKGMwtGqPsn3kxOGkUf3eh3cnXOCEYqVNfCKDVk.Q7WYTCKvi5iG',
|
||||||
'Pontianak Kota'
|
'Pontianak Kota'
|
||||||
);
|
);
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- DATA SEED: Users (1 admin, 1 walikota)
|
-- DATA SEED: Users (1 admin, 1 walikota)
|
||||||
-- Password semua: admin123
|
-- Password semua: admin123
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
INSERT INTO users (nama, username, password, role, rumah_ibadah_id) VALUES
|
INSERT INTO
|
||||||
(
|
users (nama, username, password, role, rumah_ibadah_id)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
'Administrator Sistem',
|
'Administrator Sistem',
|
||||||
'admin',
|
'admin',
|
||||||
'$2y$10$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi',
|
'$2y$10$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi',
|
||||||
'admin',
|
'admin',
|
||||||
NULL
|
NULL
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'Walikota Pontianak',
|
'Walikota Pontianak',
|
||||||
'walikota',
|
'walikota',
|
||||||
'$2y$10$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi',
|
'$2y$10$AIO3pPEflVaouN/G.rvgWeZmSjr0Nnjsd2PTna4lSHEoDTWr9KQpi',
|
||||||
'walikota',
|
'walikota',
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- DATA SEED: Keluarga Miskin (5 data)
|
-- DATA SEED: Keluarga Miskin (5 data)
|
||||||
-- Auto-assign rumah_ibadah_id dilakukan oleh aplikasi saat disimpan
|
-- Auto-assign rumah_ibadah_id dilakukan oleh aplikasi saat disimpan
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
INSERT INTO keluarga_miskin (nik, nama_kepala_keluarga, tanggal_lahir, pendidikan, jumlah_anggota, alamat, kecamatan, lat, lng, tingkat_kemiskinan, status_dtks, riwayat_penyakit, rumah_ibadah_id, jarak_ke_ibadah) VALUES
|
INSERT INTO
|
||||||
(
|
keluarga_miskin (
|
||||||
|
nik,
|
||||||
|
nama_kepala_keluarga,
|
||||||
|
tanggal_lahir,
|
||||||
|
pendidikan,
|
||||||
|
jumlah_anggota,
|
||||||
|
alamat,
|
||||||
|
kecamatan,
|
||||||
|
lat,
|
||||||
|
lng,
|
||||||
|
tingkat_kemiskinan,
|
||||||
|
status_dtks,
|
||||||
|
riwayat_penyakit,
|
||||||
|
rumah_ibadah_id,
|
||||||
|
jarak_ke_ibadah
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
'6171010101010001',
|
'6171010101010001',
|
||||||
'Budi Santoso',
|
'Budi Santoso',
|
||||||
'1978-03-15',
|
'1978-03-15',
|
||||||
@@ -200,14 +262,15 @@ INSERT INTO keluarga_miskin (nik, nama_kepala_keluarga, tanggal_lahir, pendidika
|
|||||||
4,
|
4,
|
||||||
'Gg. Mawar No. 3, Benua Melayu Darat',
|
'Gg. Mawar No. 3, Benua Melayu Darat',
|
||||||
'Pontianak Tenggara',
|
'Pontianak Tenggara',
|
||||||
-0.0283000, 109.3440000,
|
-0.0283000,
|
||||||
|
109.3440000,
|
||||||
'Sangat Miskin',
|
'Sangat Miskin',
|
||||||
'Terdaftar DTKS',
|
'Terdaftar DTKS',
|
||||||
'["Stunting","Gizi Buruk"]',
|
'["Stunting","Gizi Buruk"]',
|
||||||
1,
|
1,
|
||||||
0.2500
|
0.2500
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'6171010101010002',
|
'6171010101010002',
|
||||||
'Siti Rahayu',
|
'Siti Rahayu',
|
||||||
'1985-07-22',
|
'1985-07-22',
|
||||||
@@ -215,14 +278,15 @@ INSERT INTO keluarga_miskin (nik, nama_kepala_keluarga, tanggal_lahir, pendidika
|
|||||||
6,
|
6,
|
||||||
'Jl. Merdeka Gg. 5 No. 7, Mariana',
|
'Jl. Merdeka Gg. 5 No. 7, Mariana',
|
||||||
'Pontianak Kota',
|
'Pontianak Kota',
|
||||||
-0.0370000, 109.3430000,
|
-0.0370000,
|
||||||
|
109.3430000,
|
||||||
'Miskin',
|
'Miskin',
|
||||||
'Terdaftar DTKS',
|
'Terdaftar DTKS',
|
||||||
'["TBC","Hipertensi"]',
|
'["TBC","Hipertensi"]',
|
||||||
2,
|
2,
|
||||||
0.1200
|
0.1200
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'6171010101010003',
|
'6171010101010003',
|
||||||
'Wayan Dharma',
|
'Wayan Dharma',
|
||||||
'1972-11-08',
|
'1972-11-08',
|
||||||
@@ -230,14 +294,15 @@ INSERT INTO keluarga_miskin (nik, nama_kepala_keluarga, tanggal_lahir, pendidika
|
|||||||
3,
|
3,
|
||||||
'Gg. Bali No. 2, Bansir Laut',
|
'Gg. Bali No. 2, Bansir Laut',
|
||||||
'Pontianak Tenggara',
|
'Pontianak Tenggara',
|
||||||
-0.0290000, 109.3410000,
|
-0.0290000,
|
||||||
|
109.3410000,
|
||||||
'Sangat Miskin',
|
'Sangat Miskin',
|
||||||
'Belum DTKS',
|
'Belum DTKS',
|
||||||
'["Diabetes","Hipertensi","ODGJ"]',
|
'["Diabetes","Hipertensi","ODGJ"]',
|
||||||
1,
|
1,
|
||||||
0.3400
|
0.3400
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'6171010101010004',
|
'6171010101010004',
|
||||||
'Ahmad Fauzan',
|
'Ahmad Fauzan',
|
||||||
'1990-01-30',
|
'1990-01-30',
|
||||||
@@ -245,14 +310,15 @@ INSERT INTO keluarga_miskin (nik, nama_kepala_keluarga, tanggal_lahir, pendidika
|
|||||||
5,
|
5,
|
||||||
'Jl. Tanjungpura Gg. 12, Parit Tokaya',
|
'Jl. Tanjungpura Gg. 12, Parit Tokaya',
|
||||||
'Pontianak Selatan',
|
'Pontianak Selatan',
|
||||||
-0.0310000, 109.3350000,
|
-0.0310000,
|
||||||
|
109.3350000,
|
||||||
'Miskin',
|
'Miskin',
|
||||||
'Sedang Diusulkan',
|
'Sedang Diusulkan',
|
||||||
'["Stunting"]',
|
'["Stunting"]',
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
'6171010101010005',
|
'6171010101010005',
|
||||||
'Ruslan Effendi',
|
'Ruslan Effendi',
|
||||||
'1968-09-05',
|
'1968-09-05',
|
||||||
@@ -260,30 +326,68 @@ INSERT INTO keluarga_miskin (nik, nama_kepala_keluarga, tanggal_lahir, pendidika
|
|||||||
7,
|
7,
|
||||||
'Jl. Sutan Syahrir Gg. Melati, Batu Layang',
|
'Jl. Sutan Syahrir Gg. Melati, Batu Layang',
|
||||||
'Pontianak Utara',
|
'Pontianak Utara',
|
||||||
-0.0200000, 109.3460000,
|
-0.0200000,
|
||||||
|
109.3460000,
|
||||||
'Hampir Miskin',
|
'Hampir Miskin',
|
||||||
'Terdaftar DTKS',
|
'Terdaftar DTKS',
|
||||||
'["Jantung","DBD"]',
|
'["Jantung","DBD"]',
|
||||||
1,
|
1,
|
||||||
0.7800
|
0.7800
|
||||||
);
|
);
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- DATA SEED: Laporan Masyarakat (1 contoh)
|
-- DATA SEED: Laporan Masyarakat (1 contoh)
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
INSERT INTO laporan_masyarakat (nama_pelapor, no_hp, alamat_terlapor, lat, lng, deskripsi, status) VALUES
|
INSERT INTO
|
||||||
(
|
laporan_masyarakat (
|
||||||
|
nama_pelapor,
|
||||||
|
no_hp,
|
||||||
|
alamat_terlapor,
|
||||||
|
lat,
|
||||||
|
lng,
|
||||||
|
deskripsi,
|
||||||
|
status
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
'Pak RT 03',
|
'Pak RT 03',
|
||||||
'081234567890',
|
'081234567890',
|
||||||
'Gg. Flamboyan No. 5, Pontianak Tenggara',
|
'Gg. Flamboyan No. 5, Pontianak Tenggara',
|
||||||
-0.0275000, 109.3435000,
|
-0.0275000,
|
||||||
|
109.3435000,
|
||||||
'Terdapat keluarga dengan 5 anak yang sangat membutuhkan bantuan. Rumah tidak layak huni dan anak-anak putus sekolah.',
|
'Terdapat keluarga dengan 5 anak yang sangat membutuhkan bantuan. Rumah tidak layak huni dan anak-anak putus sekolah.',
|
||||||
'Baru'
|
'Baru'
|
||||||
);
|
);
|
||||||
|
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
-- DATA SEED: Histori Bantuan (2 contoh)
|
-- DATA SEED: Histori Bantuan (2 contoh)
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
INSERT INTO histori_bantuan (kk_id, jenis_bantuan, nominal, keterangan, tanggal_penyaluran, sumber_dana, penanggung_jawab) VALUES
|
INSERT INTO
|
||||||
(1, 'PKH', 3000000, 'Bantuan tahap I tahun 2026', '2026-01-15', 'APBN', 1),
|
histori_bantuan (
|
||||||
(2, 'BPNT/Sembako', 0, '10 kg beras + minyak goreng', '2026-02-20', 'APBN', 1);
|
kk_id,
|
||||||
|
jenis_bantuan,
|
||||||
|
nominal,
|
||||||
|
keterangan,
|
||||||
|
tanggal_penyaluran,
|
||||||
|
sumber_dana,
|
||||||
|
penanggung_jawab
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
1,
|
||||||
|
'PKH',
|
||||||
|
3000000,
|
||||||
|
'Bantuan tahap I tahun 2026',
|
||||||
|
'2026-01-15',
|
||||||
|
'APBN',
|
||||||
|
1
|
||||||
|
),
|
||||||
|
(
|
||||||
|
2,
|
||||||
|
'BPNT/Sembako',
|
||||||
|
0,
|
||||||
|
'10 kg beras + minyak goreng',
|
||||||
|
'2026-02-20',
|
||||||
|
'APBN',
|
||||||
|
1
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user