ROOM_RETENTION_MAX_DAYS) { return ROOM_RETENTION_MAX_DAYS; } return $n; } function system_settings_payload(array $store): array { $settings = $store['systemSettings'] ?? []; return [ 'roomRetentionDays' => clamp_room_retention_days($settings['roomRetentionDays'] ?? ROOM_RETENTION_MIN_DAYS), 'minRoomRetentionDays' => ROOM_RETENTION_MIN_DAYS, 'maxRoomRetentionDays' => ROOM_RETENTION_MAX_DAYS, ]; } function sync_game_system_settings(array $payload): bool { $dir = dirname(GAME_SYSTEM_SETTINGS); if (!is_dir($dir) && !@mkdir($dir, 0755, true)) { return false; } $data = [ 'roomRetentionDays' => $payload['roomRetentionDays'], 'updatedAt' => gmdate('c'), ]; $json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); return $json !== false && file_put_contents(GAME_SYSTEM_SETTINGS, $json, LOCK_EX) !== false; } $method = $_SERVER['REQUEST_METHOD'] ?? 'GET'; if ($method === 'GET') { $store = read_store(); $payload = system_settings_payload($store); sync_game_system_settings($payload); json_response(['ok' => true] + $payload); } if ($method === 'PATCH' || $method === 'PUT' || $method === 'POST') { $body = require_json_body(); if (!array_key_exists('roomRetentionDays', $body)) { json_response(['ok' => false, 'error' => 'กรุณาระบุจำนวนวันจัดเก็บห้อง'], 400); } $store = read_store(); $store['systemSettings'] = $store['systemSettings'] ?? []; $store['systemSettings']['roomRetentionDays'] = clamp_room_retention_days($body['roomRetentionDays']); if (!write_store($store)) { json_response(['ok' => false, 'error' => 'บันทึกการตั้งค่าไม่สำเร็จ'], 500); } $payload = system_settings_payload($store); if (!sync_game_system_settings($payload)) { json_response(['ok' => false, 'error' => 'บันทึกค่าไปยัง Game/data ไม่สำเร็จ'], 500); } json_response(['ok' => true] + $payload); } json_response(['ok' => false, 'error' => 'Method not allowed'], 405);