Initial commit

This commit is contained in:
Esa Kataja
2025-05-04 18:00:30 +03:00
commit b878fc6b5b
9 changed files with 899 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
import os
from pathlib import Path
from fastapi import FastAPI, Depends
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from sqlmodel import SQLModel, Session, create_engine
# Import routers
from routes import auth, admin, users, songs, reviews, results
# Constants
DATABASE_DIR = Path(__file__).parent / "data"
DATABASE_FILE = DATABASE_DIR / "database.sqlite"
DATABASE_URL = f"sqlite:///{DATABASE_FILE}"
# Ensure data directory exists
os.makedirs(DATABASE_DIR, exist_ok=True)
# Create SQLModel engine
engine = create_engine(DATABASE_URL, echo=True)
# Initialize FastAPI app
app = FastAPI(
title="Eurovision 25 Homereview API",
description="Backend API for Eurovision 25 Homereview application",
version="1.0.0"
)
# 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", StaticFiles(directory="src/static"), name="static")
# Database dependency
def get_session():
with Session(engine) as session:
yield session
# Startup event to create database tables
@app.on_event("startup")
def on_startup():
SQLModel.metadata.create_all(engine)
# Health check endpoint
@app.get("/")
async def root():
return {"status": "ok", "message": "Eurovision 25 Homereview API"}
# Include routers
app.include_router(auth.router, tags=["Authentication"])
app.include_router(admin.router, prefix="/admin", tags=["Admin"])
app.include_router(users.router, prefix="/users", tags=["Users"])
app.include_router(songs.router, prefix="/songs", tags=["Songs"])
app.include_router(reviews.router, prefix="/reviews", tags=["Reviews"])
app.include_router(results.router, prefix="/results", tags=["Results"])
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB