examinal-api / main.py
aryanmirza01's picture
FYP Clean Final Push
419bd6e
Raw
History Blame Contribute Delete
2.04 kB
"""
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
@asynccontextmanager
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)
@app.get("/", tags=["Health"])
def health_check():
return {"status": "healthy", "app": settings.APP_NAME, "version": settings.APP_VERSION}