Files
2024-05-03 21:17:04 -07:00

50 lines
1.5 KiB
Python

from fastapi import APIRouter, Depends, UploadFile, status
from fastapi.security import HTTPAuthorizationCredentials
from icecream import ic
from app.admin import oauth2_http
from app.models.musician import Musician
from app.routers import controller
router = APIRouter(
prefix="/musicians",
tags=["musicians"],
responses={404: {"description": "Not found"}},
)
@router.get("/", status_code=status.HTTP_200_OK)
async def get_musicians() -> list[Musician]:
return await controller.get_musicians()
@router.get("/{id}", status_code=status.HTTP_200_OK)
async def get_musician(id: int) -> Musician:
return await controller.get_musician(id)
@router.patch("/{id}")
async def update_musician(
id: int,
musician: Musician,
token: HTTPAuthorizationCredentials = Depends(oauth2_http),
) -> Musician:
"""Updates a musician's bio, but requires the entire musician object to be sent in the request body.
Requires authentication."""
return await controller.update_musician(
musician=musician, url_param_id=id, token=token
)
@router.post("/{id}/headshot", status_code=status.HTTP_200_OK)
async def update_musician_headshot(
id: int,
file: UploadFile,
token: HTTPAuthorizationCredentials = Depends(oauth2_http),
) -> Musician | None:
"""Recieves a headshot image file, uploads it to cloudinary, and updates the musician's headshot url in the database"""
musician = await controller.get_musician(id)
return await controller.update_musician(
musician=musician, url_param_id=id, token=token, file=file
)