Первоначальный коммит

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
poignatov-home
2026-02-08 17:01:36 +03:00
commit bad198ce29
217 changed files with 57075 additions and 0 deletions

View File

@@ -0,0 +1,168 @@
#!/bin/bash
# Безопасный скрипт для применения baseline миграции к существующим БД
# Включает создание backup, проверки и применение baseline
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Получаем переменные окружения
DB_HOST=${DB_HOST:-localhost}
DB_PORT=${DB_PORT:-5432}
DB_USER=${DB_USER:-playeng}
DB_PASSWORD=${DB_PASSWORD:-playeng}
DB_NAME=${DB_NAME:-playeng}
MIGRATIONS_PATH="play-life-backend/migrations"
BACKUP_DIR="../database-dumps"
echo "=== Применение baseline миграции ==="
echo ""
# Проверяем наличие необходимых инструментов
if ! command -v migrate &> /dev/null; then
echo -e "${RED}Ошибка: migrate не найден. Установите golang-migrate:${NC}"
echo " brew install golang-migrate"
echo " или"
echo " go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest"
exit 1
fi
if ! command -v pg_dump &> /dev/null; then
echo -e "${RED}Ошибка: pg_dump не найден. Установите PostgreSQL client tools.${NC}"
exit 1
fi
# Проверяем наличие директории миграций
if [ ! -d "$MIGRATIONS_PATH" ]; then
echo -e "${RED}Ошибка: Директория миграций не найдена: $MIGRATIONS_PATH${NC}"
exit 1
fi
# Проверяем наличие baseline миграции
if [ ! -f "$MIGRATIONS_PATH/000001_baseline.up.sql" ]; then
echo -e "${RED}Ошибка: Baseline миграция не найдена: $MIGRATIONS_PATH/000001_baseline.up.sql${NC}"
exit 1
fi
echo "Параметры подключения:"
echo " Host: $DB_HOST"
echo " Port: $DB_PORT"
echo " User: $DB_USER"
echo " Database: $DB_NAME"
echo ""
# Проверяем подключение к БД
echo "1. Проверка подключения к БД..."
PGPASSWORD=$DB_PASSWORD psql \
-h $DB_HOST \
-p $DB_PORT \
-U $DB_USER \
-d $DB_NAME \
-c "SELECT 1;" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "${RED}Ошибка: Не удалось подключиться к БД${NC}"
exit 1
fi
echo -e "${GREEN}✓ Подключение успешно${NC}"
echo ""
# Проверяем текущую версию миграции
echo "2. Проверка текущей версии миграции..."
DATABASE_URL="postgres://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME?sslmode=disable"
CURRENT_VERSION=$(migrate -path "$MIGRATIONS_PATH" -database "$DATABASE_URL" version 2>&1 || echo "none")
if echo "$CURRENT_VERSION" | grep -q "dirty"; then
echo -e "${YELLOW}⚠ База данных находится в состоянии 'dirty'${NC}"
echo " Это нормально для baseline - будет исправлено"
elif echo "$CURRENT_VERSION" | grep -q "^[0-9]"; then
VERSION_NUM=$(echo "$CURRENT_VERSION" | grep -oE "^[0-9]+" || echo "0")
if [ "$VERSION_NUM" -ge 1 ]; then
echo -e "${GREEN}✓ Версия миграции уже установлена: $VERSION_NUM${NC}"
echo " Baseline уже применен, дальнейшие действия не требуются"
exit 0
fi
fi
echo " Текущая версия: $CURRENT_VERSION"
echo ""
# Создаем backup
echo "3. Создание backup БД..."
mkdir -p "$BACKUP_DIR"
BACKUP_FILE="$BACKUP_DIR/baseline_backup_$(date +%Y%m%d_%H%M%S).sql.gz"
PGPASSWORD=$DB_PASSWORD pg_dump \
-h $DB_HOST \
-p $DB_PORT \
-U $DB_USER \
-d $DB_NAME \
| gzip > "$BACKUP_FILE"
if [ $? -ne 0 ]; then
echo -e "${RED}Ошибка: Не удалось создать backup${NC}"
exit 1
fi
BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
echo -e "${GREEN}✓ Backup создан: $BACKUP_FILE (размер: $BACKUP_SIZE)${NC}"
echo ""
# Подтверждение
echo "4. Подтверждение применения baseline..."
echo ""
echo -e "${YELLOW}ВНИМАНИЕ:${NC}"
echo " Будет установлена версия миграции в 1 (baseline)"
echo " Сама миграция НЕ будет применена (схема уже существует)"
echo " Backup сохранен в: $BACKUP_FILE"
echo ""
read -p "Продолжить? (yes/no): " CONFIRM
if [ "$CONFIRM" != "yes" ]; then
echo "Отменено пользователем"
exit 0
fi
# Применяем baseline (force 1)
echo ""
echo "5. Установка версии миграции в 1 (baseline)..."
migrate -path "$MIGRATIONS_PATH" \
-database "$DATABASE_URL" \
force 1
if [ $? -ne 0 ]; then
echo -e "${RED}Ошибка: Не удалось установить версию миграции${NC}"
echo " Backup доступен в: $BACKUP_FILE"
exit 1
fi
echo -e "${GREEN}✓ Версия миграции установлена${NC}"
echo ""
# Проверяем результат
echo "6. Проверка результата..."
FINAL_VERSION=$(migrate -path "$MIGRATIONS_PATH" -database "$DATABASE_URL" version 2>&1)
echo " Версия миграции: $FINAL_VERSION"
if echo "$FINAL_VERSION" | grep -qE "^1"; then
echo -e "${GREEN}✓ Baseline успешно применен!${NC}"
else
echo -e "${YELLOW}⚠ Версия миграции: $FINAL_VERSION${NC}"
echo " Это может быть нормально, если база в состоянии 'dirty'"
fi
echo ""
echo "=== Готово ==="
echo ""
echo "Backup сохранен в: $BACKUP_FILE"
echo "Версия миграции установлена в: 1 (baseline)"
echo ""
echo "Теперь приложение будет автоматически применять новые миграции при запуске."