getSnapshot('ping-pong'); echo "Snapshot:\n"; echo json_encode($snapshot, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n\n"; // Zwróć do gry (JavaScript) echo "Gra otrzymuje:\n"; echo "- Reguły (pointsToWin, setsToWin, itd.)\n"; echo "- Wersję (do logów)\n"; echo "- Timestamp (do auditowania)\n"; */ // ===== PRZYKŁAD 2: Zapis snapshot'u w meczu ===== echo "PRZYKŁAD 2: Zapisz snapshot w bazie danych\n"; echo "===========================================\n\n"; /* // W momencie startu meczu $matchData = [ 'team1_id' => 1, 'team2_id' => 2, 'status' => 'live', 'startTime' => date('Y-m-d H:i:s'), 'settingsSnapshot' => json_encode($snapshot) ]; // INSERT $stmt = $pdo->prepare( "INSERT INTO matches (Team1_ID, Team2_ID, Status, StartTime, SettingsSnapshot) VALUES (?, ?, ?, ?, ?)" ); $stmt->execute([ $matchData['team1_id'], $matchData['team2_id'], $matchData['status'], $matchData['startTime'], $matchData['settingsSnapshot'] ]); echo "Mecz zapisany z snapshot'em ustawień v" . $snapshot['settingsVersion'] . "\n\n"; */ // ===== PRZYKŁAD 3: Walidacja wyniku przy użyciu snapshot'u ===== echo "PRZYKŁAD 3: Waliduj wynik korzystając ze snapshot'u\n"; echo "====================================================\n\n"; /* // Pobierz mecz $stmt = $pdo->prepare("SELECT * FROM matches WHERE id = ?"); $stmt->execute([123]); $match = $stmt->fetch(PDO::FETCH_ASSOC); // Dekoduj snapshot ustawień z momentu startu $settingsSnapshot = json_decode($match['SettingsSnapshot'], true); echo "Gra skończyła się wynikiem: 2:1 (w setach)\n"; echo "Snapshot reguł z startu:\n"; echo " - pointsToWin: " . $settingsSnapshot['rules']['pointsToWin'] . "\n"; echo " - setsToWin: " . $settingsSnapshot['rules']['setsToWin'] . "\n\n"; // Walidacja if ($match['score'] !== '2:1') { echo "❌ Błędny wynik\n"; } else if ($settingsSnapshot['settingsVersion'] !== $match['settingsVersion']) { echo "⚠️ Ustawienia gry nie zgadzają się z bieżącymi\n"; echo " Ale to OK - snapshot z momentu startu się liczył\n"; } else { echo "✅ Wynik prawidłowy\n"; } */ // ===== PRZYKŁAD 4: Migracja istniejących meczy ===== echo "PRZYKŁAD 4: Migracja meczy na nowe ustawienia\n"; echo "==============================================\n\n"; /* $model = new DisciplineSettingsModel($pdo); // Pobierz wszystkie istniejące mecze $stmt = $pdo->query("SELECT id, SettingsSnapshot FROM matches WHERE SettingsSnapshot IS NULL"); $oldMatches = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "Znaleziono " . count($oldMatches) . " meczy bez snapshot'u\n"; // Dodaj snapshot do każdego starego meczu foreach ($oldMatches as $match) { // Domniemane ustawienia (np. defaults) $snapshot = $model->getSnapshot('ping-pong', 1); $updateStmt = $pdo->prepare("UPDATE matches SET SettingsSnapshot = ? WHERE id = ?"); $updateStmt->execute([json_encode($snapshot), $match['id']]); } echo "Migracja ukończona\n\n"; */ // ===== PRZYKŁAD 5: Porównanie zmiany ustawień ===== echo "PRZYKŁAD 5: Porównaj zmianę ustawień\n"; echo "====================================\n\n"; /* require_once __DIR__ . '/api/DisciplineSettingsService.php'; $model = new DisciplineSettingsModel($pdo); $service = new DisciplineSettingsService($model); // Pobierz bieżące ustawienia $current = $service->getSettingsForAPI('ping-pong'); // Pobierz dane z formularza (admin zmienia ustawienia) $newInput = [ 'rules' => [ 'pointsToWin' => 21, // było 11 'setsToWin' => 3, 'serveRotation' => 2 ], 'customization' => $current['customization'] ]; // Porównaj przed zmianą $diff = $service->compareVersions( $current['rules'], $newInput['rules'] ); echo "Zmiany ustawień:\n"; echo json_encode($diff, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n\n"; // Jeśli są istotne zmiany, powiadom graczy if (!empty($diff)) { echo "Powiadomienie dla graczy:\n"; echo "Ustawienia ping-ponga zmienią się o " . date('Y-m-d H:i') . "\n"; foreach ($diff as $field => $change) { echo " - $field: " . $change['old'] . " → " . $change['new'] . "\n"; } } */ // ===== PRZYKŁAD 6: Analytics - wpływ zmian na gry ===== echo "PRZYKŁAD 6: Analytics - wpływ zmian na gry\n"; echo "==========================================\n\n"; /* // Statystyki meczy przed zmianą $stmt = $pdo->query( "SELECT COUNT(*) as count FROM matches WHERE discipline = 'ping-pong' AND settingsVersion = 1 AND status = 'end'" ); $statsV1 = $stmt->fetch(PDO::FETCH_ASSOC); echo "Ze starymi ustawieniami (v1): " . $statsV1['count'] . " meczy\n"; // Po zmianie $stmt = $pdo->query( "SELECT COUNT(*) as count FROM matches WHERE discipline = 'ping-pong' AND settingsVersion = 2 AND status = 'end'" ); $statsV2 = $stmt->fetch(PDO::FETCH_ASSOC); echo "Z nowymi ustawieniami (v2): " . $statsV2['count'] . " meczy\n"; // Porównanie czasu trwania meczu $stmt = $pdo->query( "SELECT AVG(TIMESTAMPDIFF(MINUTE, StartTime, EndTime)) as avg_duration FROM matches WHERE discipline = 'ping-pong' AND status = 'end' AND settingsVersion = 1" ); $durationV1 = $stmt->fetch(PDO::FETCH_ASSOC); $stmt = $pdo->query( "SELECT AVG(TIMESTAMPDIFF(MINUTE, StartTime, EndTime)) as avg_duration FROM matches WHERE discipline = 'ping-pong' AND status = 'end' AND settingsVersion = 2" ); $durationV2 = $stmt->fetch(PDO::FETCH_ASSOC); echo "\nŚredni czas meczu:\n"; echo " v1: " . round($durationV1['avg_duration'], 2) . " minut\n"; echo " v2: " . round($durationV2['avg_duration'], 2) . " minut\n"; if ($durationV2['avg_duration'] > $durationV1['avg_duration']) { echo " → Mecze są dłuższe z nowymi ustawieniami\n"; } else if ($durationV2['avg_duration'] < $durationV1['avg_duration']) { echo " → Mecze są szybsze z nowymi ustawieniami\n"; } */ // ===== PRZYKŁAD 7: Rollback do starszej wersji ===== echo "PRZYKŁAD 7: Przywróć starsze ustawienia\n"; echo "======================================\n\n"; /* // Pobierz starszą wersję $oldSettings = $model->getSettingsByVersion('ping-pong', 1); if ($oldSettings) { // Przepisz back na obecne $input = [ 'pointsToWin' => $oldSettings['pointsToWin'], 'setsToWin' => $oldSettings['setsToWin'], 'serveRotation' => $oldSettings['serveRotation'], 'specialRules' => $oldSettings['specialRules'], 'customization' => json_decode($oldSettings['customization'], true) ]; $result = $model->updateSettings('ping-pong', $input, $adminId); echo "✅ Przywrócono ustawienia z wersji " . $oldSettings['settingsVersion'] . "\n"; echo " Nowa wersja: " . $result['settingsVersion'] . "\n"; } */ // ===== PRZYKŁAD 8: Testowanie w grze ===== echo "PRZYKŁAD 8: Kod JavaScript - testowanie snapshot'u\n"; echo "===================================================\n\n"; ?>