Files
TheGrapefruitsDuo/server/app/controllers/controller.py
Lucas Jensen 5d67c0c2b2 initial commit
2024-05-01 09:19:01 -07:00

100 lines
3.8 KiB
Python

from fastapi import HTTPException, UploadFile, status
from fastapi.security import HTTPAuthorizationCredentials
from icecream import ic
from app.admin import oauth_token
from app.controllers.events import EventController
from app.controllers.group import GroupController
from app.controllers.musicians import MusicianController
from app.controllers.users import UserController
from app.models.event import EventSeries, NewEventSeries
from app.models.group import Group
from app.models.musician import Musician
from app.models.user import User
class Controller:
def __init__(self) -> None:
self.event_controller = EventController()
self.musician_controller = MusicianController()
self.user_controller = UserController()
self.group_controller = GroupController()
async def get_musicians(self) -> list[Musician]:
return await self.musician_controller.get_musicians()
async def get_musician(self, id: int) -> Musician:
return await self.musician_controller.get_musician(id)
async def update_musician(
self,
musician: Musician,
url_param_id: int,
token: HTTPAuthorizationCredentials,
file: UploadFile | None = None,
) -> Musician:
if musician.id != url_param_id:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="ID in URL does not match ID in request body",
)
_, sub = oauth_token.email_and_sub(token)
await self.user_controller.get_user_by_sub(sub)
return await self.musician_controller.update_musician(
musician_id=musician.id,
new_bio=musician.bio,
file=file,
)
async def get_events(self) -> list[EventSeries]:
return await self.event_controller.get_all_series()
async def get_event(self, id: int) -> EventSeries:
return await self.event_controller.get_one_series(id)
async def create_event(
self, series: NewEventSeries, token: HTTPAuthorizationCredentials
) -> EventSeries:
_, sub = oauth_token.email_and_sub(token)
await self.user_controller.get_user_by_sub(sub)
return await self.event_controller.create_series(series)
async def add_series_poster(
self, series_id: int, poster: UploadFile, token: HTTPAuthorizationCredentials
) -> EventSeries:
_, sub = oauth_token.email_and_sub(token)
await self.user_controller.get_user_by_sub(sub)
return await self.event_controller.add_series_poster(series_id, poster)
async def delete_series(self, id: int, token: HTTPAuthorizationCredentials) -> None:
_, sub = oauth_token.email_and_sub(token)
await self.user_controller.get_user_by_sub(sub)
await self.event_controller.delete_series(id)
async def update_series(
self, route_id: int, series: EventSeries, token: HTTPAuthorizationCredentials
) -> EventSeries:
_, sub = oauth_token.email_and_sub(token)
await self.user_controller.get_user_by_sub(sub)
return await self.event_controller.update_series(route_id, series)
async def get_users(self) -> list[User]:
return await self.user_controller.get_users()
async def get_user(self, id: int) -> User:
return await self.user_controller.get_user_by_id(id)
async def create_user(self, token: HTTPAuthorizationCredentials) -> User:
return await self.user_controller.create_user(token)
async def get_group(self) -> Group:
return await self.group_controller.get_group()
async def update_group_bio(
self, bio: str, token: HTTPAuthorizationCredentials
) -> Group:
_, sub = oauth_token.email_and_sub(token)
await self.user_controller.get_user_by_sub(sub)
return await self.group_controller.update_group_bio(bio)