from fastapi import FastAPI, Depends from fastapi.middleware.cors import CORSMiddleware from sqlalchemy.orm import Session from app.api.v1.api import api_router from app.core.config import settings from app.api.deps import get_db from app.db.init_db import init_db app = FastAPI( title=settings.PROJECT_NAME, description=""" # Music Streaming API A RESTful API for a music streaming service built with FastAPI and SQLite. ## Features * User authentication (register, login, JWT tokens) * Music management (songs, albums, artists) * Playlist creation and management * Music streaming * Search functionality * Basic recommendation system ## Authentication This API uses JWT Bearer tokens for authentication. To authenticate: 1. Register a new user or use existing credentials 2. Get a token using the /api/v1/auth/login endpoint 3. Include the token in the Authorization header for protected endpoints """, version="0.1.0", openapi_url="/openapi.json", docs_url="/docs", redoc_url="/redoc", license_info={ "name": "MIT License", "url": "https://opensource.org/licenses/MIT", }, ) # Set up CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router(api_router, prefix=settings.API_V1_STR) # Health endpoint @app.get("/health", tags=["health"]) async def health_check(): return {"status": "healthy"} # Initialize database endpoint (normally would be in a separate command) @app.get("/init-db", tags=["admin"]) def initialize_db(db: Session = Depends(get_db)): init_db(db) return {"message": "Database initialized successfully"} if __name__ == "__main__": import uvicorn uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)