New endpoint POST /api/playlists/{id}/fix that analyzes a playlist
using Claude AI to identify outlier tracks that don't match the
overall vibe, and suggests better-fitting replacements.
Frontend shows results with warm amber cards for outliers and green
cards for replacements, with dismissible suggestions and visual
highlighting of flagged tracks in the track list.
32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from app.core.config import settings
|
|
from app.api.endpoints import auth, bandcamp, billing, lastfm, manual_import, playlist_fix, playlists, profile, recommendations, youtube_music
|
|
|
|
app = FastAPI(title="Vynl API", version="1.0.0", redirect_slashes=False)
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=[settings.FRONTEND_URL],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
app.include_router(auth.router, prefix="/api")
|
|
app.include_router(billing.router, prefix="/api")
|
|
app.include_router(playlists.router, prefix="/api")
|
|
app.include_router(playlist_fix.router, prefix="/api")
|
|
app.include_router(recommendations.router, prefix="/api")
|
|
app.include_router(youtube_music.router, prefix="/api")
|
|
app.include_router(manual_import.router, prefix="/api")
|
|
app.include_router(lastfm.router, prefix="/api")
|
|
app.include_router(bandcamp.router, prefix="/api")
|
|
app.include_router(profile.router, prefix="/api")
|
|
|
|
|
|
@app.get("/api/health")
|
|
async def health():
|
|
return {"status": "ok", "app": "vynl"}
|