/
GhostLogic
/
SudakOnline
Обзор
Документация
Войти
/
GhostLogic
/
SudakOnline
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
api/src/Database.php
78 строк
3 KB
GhostLogic
Загрузить файлы в «»
28 апр 2026, 18:11
Верифицирован
28 апр 2026, 18:11
3c10f40
Код
Авторство
О чём код?
<?php // src/Database.php namespace SudakOnline; use PDO; use PDOException; class Database { private static ?Database $instance = null; private PDO $pdo; private string $dbFile; private function __construct() { $this->dbFile = __DIR__ . '/../data/database.db'; $dbDir = dirname($this->dbFile); if (!is_dir($dbDir)) mkdir($dbDir, 0755, true); $isNew = !file_exists($this->dbFile); $this->pdo = new PDO('sqlite:' . $this->dbFile); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); if ($isNew) $this->createTables(); else $this->migrateTables(); } public static function getInstance(): self { if (self::$instance === null) self::$instance = new self(); return self::$instance; } public function getConnection(): PDO { return $this->pdo; } private function createTables(): void { $sql = " CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, login TEXT UNIQUE NOT NULL, email TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, first_name TEXT NOT NULL, last_name TEXT NOT NULL, role TEXT DEFAULT 'user', created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL ); CREATE TABLE sessions ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, token TEXT UNIQUE NOT NULL, expires_at INTEGER NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); CREATE TABLE user_profiles ( user_id INTEGER PRIMARY KEY, avatar_path TEXT, phone TEXT, bio TEXT, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); "; $this->pdo->exec($sql); } private function migrateTables(): void { try { $this->pdo->exec("ALTER TABLE users ADD COLUMN updated_at INTEGER DEFAULT 0"); } catch (PDOException $e) {} try { $this->pdo->exec("ALTER TABLE users ADD COLUMN role TEXT DEFAULT 'user'"); } catch (PDOException $e) {} $this->pdo->exec(" CREATE TABLE IF NOT EXISTS user_profiles ( user_id INTEGER PRIMARY KEY, avatar_path TEXT, phone TEXT, bio TEXT, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); "); } }