50 lines
1.5 KiB
Python
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
|
|
)
|