""" LinkSyncServer - Main Application """ import os from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from contextlib import asynccontextmanager from api.routes import router as api_router from config.settings import settings from models.base import Base, get_engine @asynccontextmanager async def lifespan(app: FastAPI): engine = get_engine() Base.metadata.create_all(engine) yield app = FastAPI( title="LinkSyncServer", description="Self-hosted bookmark server with collections", version="1.0.0", lifespan=lifespan, ) cors_origins = [o.strip() for o in settings.CORS_ORIGINS.split(",") if o.strip()] app.add_middleware( CORSMiddleware, allow_origins=cors_origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(api_router) app.mount("/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") @app.get("/health") def health(): return {"status": "ok"} @app.get("/") def index(request): return templates.TemplateResponse("index.html", {"request": request})