Files
TUGAS-SIG/api/locations.php
T
superbia-17 2b42e822eb first commit
2026-06-06 23:34:20 +07:00

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']);