alabuga/backend/app/main.py
2025-09-28 12:50:29 +03:00

107 lines
3.6 KiB
Python

"""Точка входа FastAPI."""
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,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(auth.router)
app.include_router(users.router)
app.include_router(missions.router)
app.include_router(journal.router)
app.include_router(onboarding.router)
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."""
return {"status": "ok"}