69 lines
1.8 KiB
Python
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")
|
|
|
|
|
|
@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)
|
|
|