-- 1. SQL SCHEMA UNTUK MYSQL DATABASE --
CREATE TABLE IF NOT EXISTS pelanggan (
id VARCHAR(20) PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
hp VARCHAR(20) NOT NULL,
alamat TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS tarif (
id VARCHAR(20) PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
harga DECIMAL(10,2) NOT NULL,
satuan VARCHAR(10) NOT NULL,
durasi INT NOT NULL
);
CREATE TABLE IF NOT EXISTS transaksi (
id VARCHAR(20) PRIMARY KEY,
pelangganId VARCHAR(20) NOT NULL,
tarifId VARCHAR(20) NOT NULL,
jumlah DECIMAL(10,2) NOT NULL,
total DECIMAL(10,2) NOT NULL,
tglMasuk DATE NOT NULL,
tglSelesai VARCHAR(20) NULL,
statusBayar VARCHAR(20) NOT NULL,
statusProses VARCHAR(20) NOT NULL,
catatan TEXT NULL
);
CREATE TABLE IF NOT EXISTS users (
id VARCHAR(20) PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
nama VARCHAR(100) NOT NULL,
role VARCHAR(20) NOT NULL
);
-- Default data user awal
INSERT INTO users (id, username, password, nama, role)
VALUES ('USR-001', 'admin', 'admin123', 'Administrator', 'Admin')
ON DUPLICATE KEY UPDATE username=username;
-- 2. FILE PHP REST API BRIDGE (bridge.php) --
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type, X-Api-Key, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Content-Type: application/json; charset=UTF-8");
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
exit(0);
}
// Setel Database
$host = "localhost";
$user = "NAMA_USER_DATABASE";
$pass = "PASSWORD_DATABASE";
$db = "rapiku_laundry";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
http_response_code(500);
echo json_encode(["error" => "MySQL Connection failed: " . $conn->connect_error]);
exit;
}
// GET Request (Membaca Data)
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$table = isset($_GET['table']) ? $_GET['table'] : '';
$allowed = ['pelanggan', 'tarif', 'transaksi', 'users'];
if (!in_array($table, $allowed)) {
http_response_code(400);
echo json_encode(["error" => "Invalid table"]);
exit;
}
$result = $conn->query("SELECT * FROM `$table`");
$data = [];
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
echo json_encode($data);
exit;
}
// POST Request (Create, Update, Delete)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$input = json_decode(file_get_contents('php://input'), true);
$action = isset($input['action']) ? $input['action'] : '';
$table = isset($input['table']) ? $input['table'] : '';
$data = isset($input['data']) ? $input['data'] : [];
$idKey = isset($input['idKey']) ? $input['idKey'] : '';
$idVal = isset($input['idVal']) ? $input['idVal'] : '';
$allowed = ['pelanggan', 'tarif', 'transaksi', 'users'];
if (!in_array($table, $allowed)) {
http_response_code(400);
echo json_encode(["error" => "Invalid table"]);
exit;
}
if ($action === 'create') {
$cols = implode(", ", array_map(function($k){ return "`$k`"; }, array_keys($data)));
$vals = implode(", ", array_map(function($v) use ($conn){
return "'" . $conn->real_escape_string($v) . "'";
}, array_values($data)));
$sql = "INSERT INTO `$table` ($cols) VALUES ($vals)";
if ($conn->query($sql)) {
echo json_encode(["success" => true]);
} else {
http_response_code(500);
echo json_encode(["error" => $conn->error]);
}
} elseif ($action === 'update') {
$sets = [];
foreach ($data as $k => $v) {
$sets[] = "`$k` = '" . $conn->real_escape_string($v) . "'";
}
$setString = implode(", ", $sets);
$escapedIdVal = $conn->real_escape_string($idVal);
$sql = "UPDATE `$table` SET $setString WHERE `$idKey` = '$escapedIdVal'";
if ($conn->query($sql)) {
echo json_encode(["success" => true]);
} else {
http_response_code(500);
echo json_encode(["error" => $conn->error]);
}
} elseif ($action === 'delete') {
$escapedIdVal = $conn->real_escape_string($idVal);
$sql = "DELETE FROM `$table` WHERE `$idKey` = '$escapedIdVal'";
if ($conn->query($sql)) {
echo json_encode(["success" => true]);
} else {
http_response_code(500);
echo json_encode(["error" => $conn->error]);
}
}
exit;
}
?>