commit inicial

This commit is contained in:
2026-04-23 00:39:58 -04:00
commit a1b9c0139d
32 changed files with 2836 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
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})