Run_code_api / src /apis /create_app.py
ABAO77's picture
Refactor code structure for improved readability and maintainability
85fa45c
raw
history blame
1.89 kB
from fastapi import FastAPI, APIRouter
from fastapi.middleware.cors import CORSMiddleware
from src.apis.routes.user_route import router as router_user
from src.apis.routes.chat_route import router as router_chat
from src.apis.routes.lesson_route import router as router_lesson
from src.apis.routes.evaluation_route import router as router_evaluation
from src.apis.routes.pronunciation_route import router as router_pronunciation
from src.apis.routes.speaking_route import router as router_speaking
from src.apis.routes.ipa_route import router as router_ipa
from loguru import logger
api_router = APIRouter(prefix="/api")
api_router.include_router(router_user)
api_router.include_router(router_chat)
api_router.include_router(router_lesson)
api_router.include_router(router_evaluation)
api_router.include_router(router_pronunciation)
api_router.include_router(router_speaking)
api_router.include_router(router_ipa)
def create_app():
app = FastAPI(docs_url="/", title="API")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.on_event("startup")
async def startup_event():
"""Pre-initialize assessor on server startup for better performance"""
try:
logger.info("Pre-initializing ProductionPronunciationAssessor...")
from src.apis.routes.speaking_route import get_assessor
from src.apis.routes.ipa_route import get_assessor as get_ipa_assessor
# Pre-initialize both assessors (they share the same singleton)
get_assessor()
get_ipa_assessor()
logger.info("ProductionPronunciationAssessor pre-initialization completed!")
except Exception as e:
logger.error(f"Failed to pre-initialize assessor: {e}")
return app