107 lines
3.6 KiB
Python
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"}
|