feat: Update spec, fix bugs, improve UI/UX, and clean up code
This commit is contained in:
@@ -2,55 +2,47 @@ from fastapi import FastAPI, Request
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from contextlib import asynccontextmanager
|
||||
from src.services.postgresql_manager import PostgreSQLManager
|
||||
from src.utils.logging_config import setup_logging
|
||||
from alembic.config import Config
|
||||
from alembic import command
|
||||
import os
|
||||
import logging
|
||||
|
||||
# Create application lifespan to handle startup/shutdown
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
# Startup
|
||||
# Run database migrations
|
||||
alembic_cfg = Config("alembic.ini")
|
||||
database_url = os.getenv("DATABASE_URL", "postgresql://postgres:password@localhost:5432/fitbit_garmin_sync")
|
||||
alembic_cfg.set_main_option("sqlalchemy.url", database_url)
|
||||
command.upgrade(alembic_cfg, "head")
|
||||
setup_logging()
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.info("--- Application Starting Up ---")
|
||||
|
||||
# Initialize database tables
|
||||
db_manager = PostgreSQLManager(database_url=database_url)
|
||||
db_manager.init_db()
|
||||
alembic_cfg = Config("alembic.ini")
|
||||
database_url = os.getenv("DATABASE_URL")
|
||||
if database_url:
|
||||
alembic_cfg.set_main_option("sqlalchemy.url", database_url)
|
||||
try:
|
||||
command.upgrade(alembic_cfg, "head")
|
||||
logger.info("Database migrations checked/applied.")
|
||||
except Exception as e:
|
||||
logger.error(f"Error running database migrations: {e}")
|
||||
else:
|
||||
logger.warning("DATABASE_URL not set, skipping migrations.")
|
||||
|
||||
yield
|
||||
|
||||
# Shutdown
|
||||
# Add any cleanup code here if needed
|
||||
logger.info("--- Application Shutting Down ---")
|
||||
|
||||
# Create FastAPI app with lifespan
|
||||
app = FastAPI(lifespan=lifespan)
|
||||
|
||||
# Mount static files
|
||||
app.mount("/static", StaticFiles(directory="static"), name="static")
|
||||
|
||||
# Initialize templates
|
||||
templates = Jinja2Templates(directory="templates")
|
||||
|
||||
# Include API routes
|
||||
from src.api.status import router as status_router
|
||||
from src.api.sync import router as sync_router
|
||||
from src.api.setup import router as setup_router
|
||||
from src.api.logs import router as logs_router
|
||||
from src.api.metrics import router as metrics_router
|
||||
from src.api.activities import router as activities_router
|
||||
from src.api import status, sync, setup, logs, metrics, activities
|
||||
|
||||
app.include_router(status_router, prefix="/api")
|
||||
app.include_router(sync_router, prefix="/api")
|
||||
app.include_router(setup_router, prefix="/api")
|
||||
app.include_router(logs_router, prefix="/api")
|
||||
app.include_router(metrics_router, prefix="/api")
|
||||
app.include_router(activities_router, prefix="/api")
|
||||
|
||||
from fastapi import Request
|
||||
app.include_router(status.router, prefix="/api")
|
||||
app.include_router(sync.router, prefix="/api")
|
||||
app.include_router(setup.router, prefix="/api")
|
||||
app.include_router(logs.router, prefix="/api")
|
||||
app.include_router(metrics.router, prefix="/api")
|
||||
app.include_router(activities.router, prefix="/api")
|
||||
|
||||
@app.get("/")
|
||||
async def read_root(request: Request):
|
||||
@@ -58,4 +50,4 @@ async def read_root(request: Request):
|
||||
|
||||
@app.get("/setup")
|
||||
async def setup_page(request: Request):
|
||||
return templates.TemplateResponse("setup.html", {"request": request})
|
||||
return templates.TemplateResponse("setup.html", {"request": request})
|
||||
|
||||
Reference in New Issue
Block a user