from fastapi import Request, APIRouter as FastAPI, Depends from fastapi.exceptions import HTTPException from responses.media import MediaResponse from responses import UnprocessableEntity, Response as APIResponse, NotFound from config import MANAGER, LIMITER from orm.media import Media, PublicMediaModel from orm.users import UserModel router = FastAPI() @router.get("/media/{media_id}", tags=["Media"], status_code=200, responses={ 200: {"model": MediaResponse}, 422: {"model": UnprocessableEntity}, 404: {"model": NotFound} }, ) @LIMITER.limit("2/second") async def get_media(request: Request, media_id: str, _user: UserModel = Depends(MANAGER)): """ Gets a media object by its ID """ if (m := await Media.select(Media.media_id).where(Media.media_id == media_id).first()) is None: raise HTTPException(status_code=404, detail="Media not found") m = Media(**m) return MediaResponse(data=PublicMediaModel(media_id=m.media_id, content=m.content, content_type=m.content_type, creation_date=m.creation_date)) @router.get("/media/{media_id}/report", tags=["Media"], status_code=200, responses={ 200: {"model": APIResponse}, 422: {"model": UnprocessableEntity}, 404: {"model": NotFound} }, ) @LIMITER.limit("2/second") async def report_media(request: Request, media_id: str, _user: UserModel = Depends(MANAGER)): """ Reports a piece of media by its ID. This creates a report that can be seen by admins, which can then decide what to do """ if (m := await Media.select(Media.media_id).where(Media.media_id == media_id).first()) is None: raise HTTPException(status_code=404, detail="Media not found") # TODO: Create report return APIResponse(msg="Success")