82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
import os
|
|
import logging
|
|
|
|
from fastapi import FastAPI
|
|
|
|
try:
|
|
# For module mode: `uvicorn app.main:app`
|
|
from app.db import check_db_connection, close_db_engine, init_db_tables
|
|
from app.logging_setup import configure_logging
|
|
from app.middleware.auth import install_auth_middleware
|
|
from app.middleware.request_log import install_request_logging_middleware
|
|
from app.routers.auth import router as auth_router
|
|
from app.routers.wechat_auth import router as wechat_auth_router
|
|
from app.routers.health import router as health_router
|
|
from app.routers.messages import router as messages_router
|
|
from app.routers.parents import router as parents_router
|
|
from app.routers.children import router as children_router
|
|
from app.routers.bindings import router as bindings_router
|
|
from app.settings import settings
|
|
except ModuleNotFoundError:
|
|
# For script mode: `python app/main.py` or VS Code "Run Python File"
|
|
from db import check_db_connection, close_db_engine, init_db_tables
|
|
from logging_setup import configure_logging
|
|
from middleware.auth import install_auth_middleware
|
|
from middleware.request_log import install_request_logging_middleware
|
|
from routers.auth import router as auth_router
|
|
from routers.health import router as health_router
|
|
from routers.messages import router as messages_router
|
|
from routers.parents import router as parents_router
|
|
from routers.children import router as children_router
|
|
from routers.bindings import router as bindings_router
|
|
from settings import settings
|
|
|
|
|
|
configure_logging()
|
|
logger = logging.getLogger("app.main")
|
|
|
|
|
|
def create_app() -> FastAPI:
|
|
app = FastAPI(
|
|
title=settings.app_name,
|
|
version=settings.app_version,
|
|
description=settings.app_description,
|
|
)
|
|
|
|
@app.on_event("startup")
|
|
def on_startup() -> None:
|
|
check_db_connection()
|
|
init_db_tables()
|
|
logger.info("application started", extra={"event": "app_start"})
|
|
|
|
@app.on_event("shutdown")
|
|
def on_shutdown() -> None:
|
|
logger.info("application shutting down", extra={"event": "app_shutdown"})
|
|
close_db_engine()
|
|
|
|
install_auth_middleware(app)
|
|
install_request_logging_middleware(app)
|
|
app.include_router(wechat_auth_router)
|
|
app.include_router(health_router)
|
|
app.include_router(messages_router)
|
|
try:
|
|
app.include_router(parents_router)
|
|
app.include_router(children_router)
|
|
app.include_router(bindings_router)
|
|
except NameError:
|
|
pass
|
|
return app
|
|
|
|
|
|
app = create_app()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
|
|
uvicorn.run(
|
|
app,
|
|
host=os.getenv("HOST", settings.host),
|
|
port=int(os.getenv("PORT", str(settings.port))),
|
|
)
|