Spaces:
Configuration error
Configuration error
| """ | |
| Examinal – AI‑powered assessment platform. | |
| Entry‑point: uvicorn main:app --reload | |
| """ | |
| from contextlib import asynccontextmanager | |
| from pathlib import Path | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from app.config import settings | |
| from app.database import engine, Base | |
| from app.middleware.activity_logger import ActivityLoggerMiddleware | |
| # ── Import every model so Base.metadata knows them ── | |
| from app.models import ( | |
| user, course, content, exam, question, submission, activity_log, | |
| ) | |
| from app.routers import ( | |
| auth, users, courses, content as content_router, | |
| questions, exams, submissions, grading, analytics, admin, | |
| ) | |
| from app.routers.contact import router as contact_router | |
| async def lifespan(application: FastAPI): | |
| # ── Startup ── | |
| Path(settings.UPLOAD_DIR).mkdir(parents=True, exist_ok=True) | |
| Path(settings.VECTOR_STORE_DIR).mkdir(parents=True, exist_ok=True) | |
| Base.metadata.create_all(bind=engine) | |
| yield | |
| # ── Shutdown ── | |
| app = FastAPI( | |
| title=settings.APP_NAME, | |
| version=settings.APP_VERSION, | |
| description="AI‑powered end‑to‑end assessment platform", | |
| lifespan=lifespan, | |
| ) | |
| # ── CORS ── | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # ── Custom middleware ── | |
| app.add_middleware(ActivityLoggerMiddleware) | |
| # ── Routers ── | |
| app.include_router(auth.router) | |
| app.include_router(users.router) | |
| app.include_router(courses.router) | |
| app.include_router(content_router.router) | |
| app.include_router(questions.router) | |
| app.include_router(exams.router) | |
| app.include_router(submissions.router) | |
| app.include_router(grading.router) | |
| app.include_router(analytics.router) | |
| app.include_router(admin.router) | |
| app.include_router(contact_router) | |
| def health_check(): | |
| return {"status": "healthy", "app": settings.APP_NAME, "version": settings.APP_VERSION} | |