Files
MincedPad/backend/app/main.py
T
2026-07-14 12:54:20 +08:00

50 lines
1.2 KiB
Python

import asyncio
from contextlib import asynccontextmanager
from fastapi import FastAPI
from app.api.admin import router as admin_router
from app.api.public import router as public_router
from app.config import settings
from app.db import Base, SessionLocal, engine
from app import models # noqa: F401 — register models with Base.metadata
from app.services import cleaner as cleaner_service
async def _cleaner_loop() -> None:
while True:
db = SessionLocal()
try:
cleaner_service.run_once(db)
except Exception:
pass
finally:
db.close()
await asyncio.sleep(60)
@asynccontextmanager
async def lifespan(_app: FastAPI):
settings.data_dir.mkdir(parents=True, exist_ok=True)
settings.uploads_dir.mkdir(parents=True, exist_ok=True)
Base.metadata.create_all(bind=engine)
task = asyncio.create_task(_cleaner_loop())
try:
yield
finally:
task.cancel()
try:
await task
except asyncio.CancelledError:
pass
app = FastAPI(title="MincedPad", lifespan=lifespan)
app.include_router(public_router)
app.include_router(admin_router)
@app.get("/api/health")
def health():
return {"ok": True, "name": "MincedPad"}