67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
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.0rc7",
|
|
openapi_url="/sec_schema.json",
|
|
docs_url="/docut",
|
|
redoc_url=None,
|
|
)
|
|
|
|
|
|
@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)
|