40 lines
1.5 KiB
PHP
40 lines
1.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
function ensureWorldsTable(): void {
|
|
$sql = "CREATE TABLE IF NOT EXISTS worlds (
|
|
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(120) NOT NULL,
|
|
size INT UNSIGNED NOT NULL DEFAULT 16,
|
|
world_json MEDIUMTEXT NOT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_worlds_updated_at (updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
|
|
db()->exec($sql);
|
|
}
|
|
|
|
function listWorlds(int $limit = 10): array {
|
|
$stmt = db()->prepare('SELECT id, name, size, updated_at FROM worlds ORDER BY updated_at DESC LIMIT :limit');
|
|
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
|
|
$stmt->execute();
|
|
return $stmt->fetchAll();
|
|
}
|
|
|
|
function getWorldById(int $id): ?array {
|
|
$stmt = db()->prepare('SELECT id, name, size, world_json, created_at, updated_at FROM worlds WHERE id = :id');
|
|
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
|
|
$stmt->execute();
|
|
$row = $stmt->fetch();
|
|
return $row ?: null;
|
|
}
|
|
|
|
function saveWorld(string $name, string $worldJson, int $size): int {
|
|
$stmt = db()->prepare('INSERT INTO worlds (name, size, world_json) VALUES (:name, :size, :world_json)');
|
|
$stmt->bindValue(':name', $name);
|
|
$stmt->bindValue(':size', $size, PDO::PARAM_INT);
|
|
$stmt->bindValue(':world_json', $worldJson);
|
|
$stmt->execute();
|
|
return (int)db()->lastInsertId();
|
|
}
|