feat: tambah migrate.php untuk inisialisasi tabel di Coolify

This commit is contained in:
2026-06-11 09:56:18 +07:00
parent ad1806aa17
commit a1ea1e3e75
+162
View File
@@ -0,0 +1,162 @@
<?php
// ============================================================
// MIGRATION SCRIPT — Web GIS Layer
// Akses sekali via browser untuk membuat semua tabel
// Hapus file ini setelah migrasi berhasil!
// ============================================================
require_once 'config.php';
header('Content-Type: text/html; charset=utf-8');
$results = [];
function runSQL(mysqli $conn, string $label, string $sql): array {
if ($conn->query($sql)) {
return ['label' => $label, 'status' => 'OK', 'msg' => ''];
} else {
return ['label' => $label, 'status' => 'ERROR', 'msg' => $conn->error];
}
}
// ── 1. Tabel data_jalan ───────────────────────────────────────
$results[] = runSQL($conn, 'CREATE TABLE data_jalan', "
CREATE TABLE IF NOT EXISTS data_jalan (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nama_jalan VARCHAR(150) NOT NULL,
status_jalan ENUM('Jalan Nasional','Jalan Provinsi','Jalan Kabupaten') NOT NULL,
panjang_m DECIMAL(12,2) DEFAULT 0.00,
geojson LONGTEXT NOT NULL,
keterangan TEXT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// ── 2. Tabel data_parsil ──────────────────────────────────────
$results[] = runSQL($conn, 'CREATE TABLE data_parsil', "
CREATE TABLE IF NOT EXISTS data_parsil (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nama_parsil VARCHAR(150) NOT NULL,
status_hak ENUM('Sertifikat Hak Milik','Sertifikat Hak Guna Bangunan','Sertifikat Hak Guna Usaha','Sertifikat Hak Pakai') NOT NULL,
luas_m2 DECIMAL(15,2) DEFAULT 0.00,
geojson LONGTEXT NOT NULL,
pemilik VARCHAR(150) DEFAULT NULL,
keterangan TEXT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// ── 3. Tabel data_spbu ────────────────────────────────────────
$results[] = runSQL($conn, 'CREATE TABLE data_spbu', "
CREATE TABLE IF NOT EXISTS data_spbu (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nama_spbu VARCHAR(150) NOT NULL,
telepon VARCHAR(20) DEFAULT NULL,
buka_24jam TINYINT(1) NOT NULL DEFAULT 0,
lat DECIMAL(10,7) NOT NULL,
lng DECIMAL(10,7) NOT NULL,
geojson LONGTEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// ── 4. Data contoh: Jalan ─────────────────────────────────────
$results[] = runSQL($conn, 'INSERT data_jalan (sample)', "
INSERT IGNORE INTO data_jalan (id, nama_jalan, status_jalan, panjang_m, geojson, keterangan) VALUES
(1, 'Jl. Ahmad Yani', 'Jalan Nasional', 2100.00,
'{\"type\":\"LineString\",\"coordinates\":[[109.3300,-0.0200],[109.3350,-0.0210],[109.3400,-0.0220]]}',
'Jalan utama Kota Pontianak'),
(2, 'Jl. Gajah Mada', 'Jalan Provinsi', 1450.50,
'{\"type\":\"LineString\",\"coordinates\":[[109.3200,-0.0350],[109.3250,-0.0360],[109.3300,-0.0370]]}',
'Penghubung pusat kota'),
(3, 'Jl. Tanjungpura', 'Jalan Kabupaten', 870.25,
'{\"type\":\"LineString\",\"coordinates\":[[109.3450,-0.0100],[109.3470,-0.0110],[109.3490,-0.0120]]}',
'Jalan lingkungan')
");
// ── 5. Data contoh: Parsil ────────────────────────────────────
$results[] = runSQL($conn, 'INSERT data_parsil (sample)', "
INSERT IGNORE INTO data_parsil (id, nama_parsil, status_hak, luas_m2, geojson, pemilik, keterangan) VALUES
(1, 'Parsil A-001', 'Sertifikat Hak Milik', 1200.00,
'{\"type\":\"Polygon\",\"coordinates\":[[[109.3200,-0.0200],[109.3210,-0.0200],[109.3210,-0.0210],[109.3200,-0.0210],[109.3200,-0.0200]]]}',
'Budi Santoso', 'Tanah kavling perumahan'),
(2, 'Parsil B-002', 'Sertifikat Hak Guna Bangunan', 850.50,
'{\"type\":\"Polygon\",\"coordinates\":[[[109.3220,-0.0220],[109.3230,-0.0220],[109.3230,-0.0230],[109.3220,-0.0230],[109.3220,-0.0220]]]}',
'PT. Maju Bersama', 'Kavling komersial')
");
// ── 6. Data contoh: SPBU ─────────────────────────────────────
$results[] = runSQL($conn, 'INSERT data_spbu (sample)', "
INSERT IGNORE INTO data_spbu (id, nama_spbu, telepon, buka_24jam, lat, lng, geojson) VALUES
(1, 'SPBU Jl. Ahmad Yani', '0561-123456', 1, -0.0200, 109.3300,
'{\"type\":\"Point\",\"coordinates\":[109.3300,-0.0200]}'),
(2, 'SPBU Jl. Gajah Mada', '0561-654321', 0, -0.0350, 109.3200,
'{\"type\":\"Point\",\"coordinates\":[109.3200,-0.0350]}'),
(3, 'SPBU Jl. Tanjungpura', '0561-789012', 1, -0.0100, 109.3450,
'{\"type\":\"Point\",\"coordinates\":[109.3450,-0.0100]}')
");
$conn->close();
// ── Tampilkan hasil ───────────────────────────────────────────
$allOk = !in_array('ERROR', array_column($results, 'status'));
?>
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Migration — Web GIS Layer</title>
<style>
body { font-family: 'Segoe UI', sans-serif; background: #0d1117; color: #e6edf3; padding: 40px; max-width: 700px; margin: auto; }
h1 { color: #58a6ff; margin-bottom: 8px; }
p.sub { color: #8b949e; margin-bottom: 30px; }
.card { background: #161b22; border: 1px solid #30363d; border-radius: 10px; padding: 20px; margin-bottom: 12px; display: flex; align-items: center; gap: 16px; }
.badge { padding: 4px 14px; border-radius: 20px; font-size: .8rem; font-weight: 700; }
.ok { background: rgba(63,185,80,.15); color: #3fb950; border: 1px solid rgba(63,185,80,.4); }
.err { background: rgba(248,81,73,.15); color: #f85149; border: 1px solid rgba(248,81,73,.4); }
.label { flex: 1; font-size: .9rem; }
.msg { font-size: .75rem; color: #f85149; margin-top: 4px; }
.result-box { margin-top: 28px; padding: 20px; border-radius: 10px; text-align: center; }
.result-ok { background: rgba(63,185,80,.1); border: 1px solid rgba(63,185,80,.3); }
.result-err { background: rgba(248,81,73,.1); border: 1px solid rgba(248,81,73,.3); }
.result-ok h2 { color: #3fb950; }
.result-err h2 { color: #f85149; }
.btn { display: inline-block; margin-top: 16px; padding: 10px 28px; background: #388bfd; color: #fff; border-radius: 8px; text-decoration: none; font-weight: 600; }
.warn { background: rgba(210,153,34,.1); border: 1px solid rgba(210,153,34,.3); color: #d29922; border-radius: 8px; padding: 12px 16px; margin-top: 16px; font-size: .84rem; }
</style>
</head>
<body>
<h1>🚀 Migration — Web GIS Layer</h1>
<p class="sub">Membuat tabel dan data contoh di database <code>default</code></p>
<?php foreach ($results as $r): ?>
<div class="card">
<span class="badge <?= $r['status'] === 'OK' ? 'ok' : 'err' ?>"><?= $r['status'] ?></span>
<div class="label">
<?= htmlspecialchars($r['label']) ?>
<?php if ($r['msg']): ?><div class="msg">⚠ <?= htmlspecialchars($r['msg']) ?></div><?php endif; ?>
</div>
</div>
<?php endforeach; ?>
<div class="result-box <?= $allOk ? 'result-ok' : 'result-err' ?>">
<?php if ($allOk): ?>
<h2>✅ Migrasi Berhasil!</h2>
<p>Semua tabel berhasil dibuat. Aplikasi WebGIS siap digunakan.</p>
<a href="index.html" class="btn">Buka Aplikasi →</a>
<?php else: ?>
<h2>❌ Ada Error</h2>
<p>Beberapa langkah gagal. Periksa pesan error di atas.</p>
<?php endif; ?>
</div>
<?php if ($allOk): ?>
<div class="warn">
⚠️ <strong>PENTING:</strong> Hapus file <code>migrate.php</code> setelah migrasi berhasil untuk keamanan!
</div>
<?php endif; ?>
</body>
</html>