Files
web_work/migrations/migrate.php
kirill.khorkov 29b9aaac50 Исправление багов авторизации, корзины и админки
- Исправлено выпадающее меню профиля (hover-баг с margin-top)
- Исправлена авторизация: правильные пути к API (api/auth.php)
- Исправлены ссылки на админку (admin/index.php вместо admin_panel.php)
- Исправлены пути API корзины в catalog.php и checkout.php
- Добавлена форма добавления/редактирования товаров в админке
- Исправлены кнопки +/- в корзине (улучшена обработка AJAX)
- Исправлена регистрация: правильные пути и обработка boolean в PostgreSQL
- Добавлена миграция для назначения прав админа пользователю admin@mail.ru
- Удален тестовый блок 'Быстрый вход' для неавторизованных пользователей
- Улучшена обработка ошибок во всех API-эндпоинтах
2025-12-16 02:58:44 +03:00

110 lines
3.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Простой раннер миграций для PostgreSQL
* Запуск: php migrations/migrate.php
*/
// Подключаем конфиг базы данных
require_once __DIR__ . '/../config/database.php';
echo "===========================================\n";
echo " AETERNA - Система миграций базы данных\n";
echo "===========================================\n\n";
try {
$db = Database::getInstance()->getConnection();
echo "[OK] Подключение к базе данных успешно\n\n";
// 1. Создаем таблицу для отслеживания миграций
$db->exec("
CREATE TABLE IF NOT EXISTS migrations (
id SERIAL PRIMARY KEY,
filename VARCHAR(255) NOT NULL UNIQUE,
applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
");
echo "[OK] Таблица migrations готова\n";
// 2. Получаем список уже примененных миграций
$stmt = $db->query("SELECT filename FROM migrations ORDER BY filename");
$applied = $stmt->fetchAll(PDO::FETCH_COLUMN);
echo "[INFO] Уже применено миграций: " . count($applied) . "\n\n";
// 3. Сканируем папку на SQL-файлы
$migrationFiles = glob(__DIR__ . '/*.sql');
sort($migrationFiles);
$newMigrations = 0;
foreach ($migrationFiles as $file) {
$filename = basename($file);
// Пропускаем seed_data.sql - он запускается отдельно
if ($filename === 'seed_data.sql') {
continue;
}
// Проверяем, была ли миграция уже применена
if (in_array($filename, $applied)) {
echo "[SKIP] $filename (уже применена)\n";
continue;
}
// Применяем миграцию
echo "[RUN] Применяю $filename... ";
$sql = file_get_contents($file);
try {
$db->exec($sql);
// Записываем в таблицу миграций
$stmt = $db->prepare("INSERT INTO migrations (filename) VALUES (?)");
$stmt->execute([$filename]);
echo "OK\n";
$newMigrations++;
} catch (PDOException $e) {
echo "ОШИБКА!\n";
echo " Причина: " . $e->getMessage() . "\n";
echo "\n[!] Миграция остановлена из-за ошибки\n";
exit(1);
}
}
echo "\n-------------------------------------------\n";
if ($newMigrations > 0) {
echo "[SUCCESS] Применено новых миграций: $newMigrations\n";
} else {
echo "[INFO] Все миграции уже применены\n";
}
// 4. Спрашиваем про seed_data
$seedFile = __DIR__ . '/seed_data.sql';
if (file_exists($seedFile)) {
echo "\n[?] Хотите загрузить начальные данные (seed_data.sql)?\n";
echo " Запустите: php migrations/migrate.php --seed\n";
if (isset($argv[1]) && $argv[1] === '--seed') {
echo "\n[RUN] Загружаю seed_data.sql... ";
try {
$sql = file_get_contents($seedFile);
$db->exec($sql);
echo "OK\n";
} catch (PDOException $e) {
echo "ОШИБКА: " . $e->getMessage() . "\n";
}
}
}
echo "\n===========================================\n";
echo " Миграции завершены!\n";
echo "===========================================\n";
} catch (PDOException $e) {
echo "[ERROR] Ошибка подключения к БД: " . $e->getMessage() . "\n";
exit(1);
}