From 88c84dfc71748a4a3c26208e8da59b65c1e9c34f Mon Sep 17 00:00:00 2001 From: YehorI Date: Sun, 28 Sep 2025 12:50:29 +0300 Subject: [PATCH] fix demo users --- Makefile | 3 -- backend/app/main.py | 68 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b6746f1..cf209ee 100644 --- a/Makefile +++ b/Makefile @@ -9,9 +9,6 @@ help: ## Show this help message build: ## Build Docker containers docker compose build -build-no-cache: ## Build Docker containers without cache - docker compose build --no-cache - # Database commands migrate: build ## Run database migrations in Docker docker compose run --rm backend python -m app.db.init diff --git a/backend/app/main.py b/backend/app/main.py index 22279b6..d539e8b 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -4,15 +4,76 @@ from __future__ import annotations from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware +from sqlalchemy.orm import Session from app.api.routes import admin, auth, journal, missions, onboarding, store, users from app.core.config import settings +from app.core.security import get_password_hash +from app.db.session import SessionLocal +from app.models.user import User, UserRole +from app.models.rank import Rank # Import all models to ensure they're registered with Base.metadata from app import models # This imports all models through the __init__.py app = FastAPI(title=settings.project_name) +def create_demo_users() -> None: + """Create demo users if they don't exist.""" + session: Session = SessionLocal() + try: + # Check if demo users already exist + pilot_exists = session.query(User).filter(User.email == "candidate@alabuga.space").first() + hr_exists = session.query(User).filter(User.email == "hr@alabuga.space").first() + + if pilot_exists and hr_exists: + print("✅ Demo users already exist") + return + + # Get base rank (or None if no ranks exist) + base_rank = session.query(Rank).order_by(Rank.required_xp).first() + + # Create pilot demo user + if not pilot_exists: + pilot = User( + email="candidate@alabuga.space", + full_name="Алексей Пилотов", + role=UserRole.PILOT, + hashed_password=get_password_hash("orbita123"), + current_rank_id=base_rank.id if base_rank else None, + is_email_confirmed=True, + preferred_branch="Получение оффера", + motivation="Хочу пройти все миссии и закрепиться в экипаже.", + ) + session.add(pilot) + print("✅ Created demo pilot user: candidate@alabuga.space / orbita123") + + # Create HR demo user + if not hr_exists: + hr_rank = session.query(Rank).order_by(Rank.required_xp.desc()).first() + hr = User( + email="hr@alabuga.space", + full_name="Мария HR", + role=UserRole.HR, + hashed_password=get_password_hash("orbita123"), + current_rank_id=hr_rank.id if hr_rank else None, + is_email_confirmed=True, + preferred_branch="Куратор миссий", + ) + session.add(hr) + print("✅ Created demo HR user: hr@alabuga.space / orbita123") + + session.commit() + except Exception as e: + print(f"❌ Failed to create demo users: {e}") + session.rollback() + finally: + session.close() + + +app = FastAPI(title=settings.project_name) + + app.add_middleware( CORSMiddleware, allow_origins=settings.backend_cors_origins, @@ -31,6 +92,13 @@ app.include_router(store.router) app.include_router(admin.router) +@app.on_event("startup") +async def startup_event(): + """Create demo users on startup if in debug mode.""" + if settings.debug: + create_demo_users() + + @app.get("/", summary="Проверка работоспособности") def healthcheck() -> dict[str, str]: """Простой ответ для Docker healthcheck."""