from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles # Import routers from routes import auth, admin, users, songs, reviews, results, contest from lib.logger import logger from lib.db import init_db # Initialize FastAPI app app = FastAPI( title="Eurovision 25 Homereview API", description="Backend API for Eurovision 25 Homereview application", version="1.0rc3", ) @app.middleware("http") async def log_requests(request, call_next): body = await request.body() logger.debug(f"Request body: {body.decode('utf-8')}") response = await call_next(request) return response # Add CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], # For development; restrict in production allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Mount static files for avatars app.mount("/static/avatars", StaticFiles(directory="static/avatars"), name="avatars") app.mount("/static/flags", StaticFiles(directory="static/flags"), name="flags") # Startup event to create database tables @app.on_event("startup") def on_startup(): logger.info("Starting up...") init_db() # Health check endpoint @app.get("/") async def root(): logger.debug("Root endpoint accessed") return {"status": "ok", "message": "Eurovision 25 Homereview API"} # Include routers app.include_router(auth.router) app.include_router(admin.router) app.include_router(users.router) app.include_router(songs.router) app.include_router(reviews.router) app.include_router(results.router) app.include_router(contest.router)