archive-backend/main.py
2026-11-07 19:37:11 +00:00

69 lines
1.8 KiB
Python

from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from core.config import (
AUDIO_DIR,
COVERS_DIR,
PHOTOS_DIR_RESPNS,
STATIC_DIR,
THUMBS_DIR,
YT_DIR,
)
from core.db import Base, engine
from routers import audio, auth, channel, photo, playlist, search, video
from search.setup import setup_videos_index
@asynccontextmanager
async def lifespan(app: FastAPI):
setup_videos_index()
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
yield
await engine.dispose()
app = FastAPI(lifespan=lifespan)
app.add_middleware(
CORSMiddleware,
allow_origins=[
"http://127.0.0.1:5173",
"http://localhost:5173",
],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static")
try:
app.mount("/yt", StaticFiles(directory=YT_DIR), name="yt")
app.mount("/media", StaticFiles(directory=PHOTOS_DIR_RESPNS), name="media")
app.mount("/_thumbs", StaticFiles(directory=THUMBS_DIR), name="_thumbs")
app.mount("/_covers", StaticFiles(directory=COVERS_DIR), name="_covers")
app.mount("/audio", StaticFiles(directory=AUDIO_DIR), name="audio")
except RuntimeError as err:
print("[FAIL]: MEDIA DIRECTORY NOT FOUND", err)
@app.get("/favicon.ico", include_in_schema=False)
async def favicon():
return FileResponse(STATIC_DIR / "favicon.ico")
app.include_router(photo.router)
app.include_router(video.router)
app.include_router(playlist.router)
app.include_router(channel.router)
app.include_router(audio.router)
app.include_router(auth.router)
app.include_router(search.router)