Files
spotify-cantina/app/main.py
T
2026-04-23 00:39:58 -04:00

46 lines
1.4 KiB
Python

import asyncio
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from starlette.middleware.sessions import SessionMiddleware
from app.config import settings
from app.database import engine, apply_migrations
from app.models import Base
from app.routers import auth, player, admin, voting, stats
from app import spotify
from app.history_poller import start_poller
Base.metadata.create_all(bind=engine)
apply_migrations()
@asynccontextmanager
async def lifespan(app: FastAPI):
task = asyncio.create_task(start_poller())
yield
task.cancel()
app = FastAPI(title="Spotify Cantina", lifespan=lifespan)
app.add_middleware(SessionMiddleware, secret_key=settings.SECRET_KEY)
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="app/templates")
app.include_router(auth.router)
app.include_router(player.router)
app.include_router(admin.router)
app.include_router(voting.router)
app.include_router(stats.router)
@app.get("/", response_class=HTMLResponse)
def index(request: Request):
if not spotify.is_authenticated():
return RedirectResponse(url="/auth/login")
return templates.TemplateResponse("index.html", {"request": request})