DBENGINE / app /main.py
triflix's picture
Upload 21 files
cfcea40 verified
"""
Main FastAPI Application
────────────────────────
Ties everything together: API + Admin + MCP + Backup scheduler
Sources:
- FastAPI: https://fastapi.tiangolo.com/
"""
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from contextlib import asynccontextmanager
import asyncio
import logging
from app.database import init_db
from app.backup import scheduled_backup_task
from app.admin.router import router as admin_router
from app.api.routes import router as api_router
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
"""
Startup: init DB + start backup scheduler
Shutdown: cleanup
"""
# ── STARTUP ──
logger.info("πŸš€ Initializing database...")
init_db()
logger.info("βœ… Database ready")
# Start background backup scheduler
backup_task = asyncio.create_task(scheduled_backup_task())
logger.info("⏰ Backup scheduler started (every 30 min)")
yield
# ── SHUTDOWN ──
backup_task.cancel()
logger.info("πŸ‘‹ Shutting down")
app = FastAPI(
title="SQLite DBaaS - Admin Console",
description="SQLite + Litestream + HF Bucket powered database service",
version="1.0.0",
lifespan=lifespan,
)
# ── Mount routes ──
app.include_router(admin_router)
app.include_router(api_router)
# ── Mount static files ──
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/")
async def root():
return {
"status": "running",
"service": "SQLite DBaaS",
"admin": "/admin/login",
"docs": "/docs",
"health": "/admin/api/health",
}