93 lines
3.8 KiB
PHP
93 lines
3.8 KiB
PHP
<?php
|
|
// ============================================================
|
|
// api/locations.php
|
|
// GET → ambil semua lokasi
|
|
// POST → simpan lokasi baru
|
|
// PATCH ?id=N → update koordinat (pindah pin)
|
|
// DELETE ?id=N → hapus lokasi
|
|
// ============================================================
|
|
|
|
require_once __DIR__ . '/config.php';
|
|
|
|
$method = $_SERVER['REQUEST_METHOD'];
|
|
|
|
// ── GET ───────────────────────────────────────────────────
|
|
if ($method === 'GET') {
|
|
$pdo = getDB();
|
|
$rows = $pdo->query("SELECT * FROM locations ORDER BY created_at DESC")->fetchAll();
|
|
foreach ($rows as &$row) {
|
|
$row['lat'] = (float) $row['lat'];
|
|
$row['lng'] = (float) $row['lng'];
|
|
$row['is24h'] = (int) $row['is24h'];
|
|
}
|
|
echo json_encode(['success' => true, 'data' => $rows]);
|
|
exit;
|
|
}
|
|
|
|
// ── POST: simpan baru ─────────────────────────────────────
|
|
if ($method === 'POST') {
|
|
$body = json_decode(file_get_contents('php://input'), true);
|
|
$name = trim($body['name'] ?? '');
|
|
$phone = trim($body['phone'] ?? '');
|
|
$is24h = isset($body['is24h']) ? (int)(bool)$body['is24h'] : 0;
|
|
$lat = isset($body['lat']) ? (float)$body['lat'] : null;
|
|
$lng = isset($body['lng']) ? (float)$body['lng'] : null;
|
|
|
|
if ($name === '') { http_response_code(400); echo json_encode(['error'=>'Nama wajib diisi']); exit; }
|
|
if ($lat === null || $lng === null) { http_response_code(400); echo json_encode(['error'=>'Koordinat wajib diisi']); exit; }
|
|
|
|
$pdo = getDB();
|
|
$stmt = $pdo->prepare(
|
|
"INSERT INTO locations (name, phone, is24h, lat, lng) VALUES (:name,:phone,:is24h,:lat,:lng)"
|
|
);
|
|
$stmt->execute([':name'=>$name, ':phone'=>$phone, ':is24h'=>$is24h, ':lat'=>$lat, ':lng'=>$lng]);
|
|
|
|
$newId = $pdo->lastInsertId();
|
|
$newRow = $pdo->query("SELECT * FROM locations WHERE id = $newId")->fetch();
|
|
$newRow['lat'] = (float)$newRow['lat'];
|
|
$newRow['lng'] = (float)$newRow['lng'];
|
|
$newRow['is24h'] = (int) $newRow['is24h'];
|
|
|
|
http_response_code(201);
|
|
echo json_encode(['success' => true, 'data' => $newRow]);
|
|
exit;
|
|
}
|
|
|
|
// ── PATCH: update koordinat setelah pin dipindah ──────────
|
|
if ($method === 'PATCH') {
|
|
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
|
$body = json_decode(file_get_contents('php://input'), true);
|
|
$lat = isset($body['lat']) ? (float)$body['lat'] : null;
|
|
$lng = isset($body['lng']) ? (float)$body['lng'] : null;
|
|
|
|
if ($id <= 0 || $lat === null || $lng === null) {
|
|
http_response_code(400);
|
|
echo json_encode(['error' => 'ID atau koordinat tidak valid']);
|
|
exit;
|
|
}
|
|
|
|
$pdo = getDB();
|
|
$stmt = $pdo->prepare("UPDATE locations SET lat=:lat, lng=:lng WHERE id=:id");
|
|
$stmt->execute([':lat'=>$lat, ':lng'=>$lng, ':id'=>$id]);
|
|
|
|
echo json_encode(['success' => true, 'message' => 'Koordinat diperbarui']);
|
|
exit;
|
|
}
|
|
|
|
// ── DELETE ────────────────────────────────────────────────
|
|
if ($method === 'DELETE') {
|
|
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
|
if ($id <= 0) { http_response_code(400); echo json_encode(['error'=>'ID tidak valid']); exit; }
|
|
|
|
$pdo = getDB();
|
|
$stmt = $pdo->prepare("DELETE FROM locations WHERE id = :id");
|
|
$stmt->execute([':id' => $id]);
|
|
|
|
if ($stmt->rowCount() === 0) { http_response_code(404); echo json_encode(['error'=>'Data tidak ditemukan']); exit; }
|
|
|
|
echo json_encode(['success' => true, 'message' => 'Data dihapus']);
|
|
exit;
|
|
}
|
|
|
|
http_response_code(405);
|
|
echo json_encode(['error' => 'Method tidak diizinkan']); |