Skip to content

Commit

Permalink
feat: add basic league events/groups/classes get routes
Browse files Browse the repository at this point in the history
  • Loading branch information
brownben committed Apr 10, 2024
1 parent d84dc39 commit ba2dd6e
Showing 1 changed file with 77 additions and 19 deletions.
96 changes: 77 additions & 19 deletions backend/src/routes/leagues.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from ..exceptions import HTTP_201, HTTP_400, HTTP_404, HTTP_409
from ..schemas import (
Competitor,
EventWithLeagueDetails,
League,
LeagueClass,
LeagueEvent,
Expand Down Expand Up @@ -145,6 +146,25 @@ async def delete_league(
return Message(detail=f"League `{name}` deleted")


@router.get("/{league_name}/events", response_model=list[EventWithLeagueDetails])
async def get_league_events(
league_name: str = Path(
title="League Name",
description="Name of the league to get the results for",
example="Sprintelope 2021",
),
) -> list[EventWithLeagueDetails]:
league, events = await asyncio.gather(
Leagues.get_by_name(league_name),
Events.get_by_league(league_name),
)

if not league:
raise HTTP_404(f"Couldn't find league with name `{league_name}`")

return events


def get_results_for_event(
event: LeagueEvent, league_class: LeagueClass
) -> Awaitable[Iterable[Result]]:
Expand Down Expand Up @@ -266,32 +286,23 @@ async def get_league_results(
)


@router.post("/{league_name}/classes", response_model=Message)
async def create_league_class(
cls: LeagueClass,
@router.get("/{league_name}/groups", response_model=list[LeagueClass])
async def get_league_classes(
league_name: str = Path(
title="League Name",
description="Name of the league",
description="Name of the league ",
example="Sprintelope 2021",
),
authentication: bool = Depends(require_authentication),
) -> Message:
league = await Leagues.get_by_name(league_name)
) -> list[LeagueClass]:
league, classes = await asyncio.gather(
Leagues.get_by_name(league_name),
LeagueClasses.get_by_league(league_name),
)

if not league:
raise HTTP_404(f"Couldn't find league with name `{cls.league}`")

if league_name != cls.league:
raise HTTP_400("League in body and URL don't match")

if await LeagueClasses.get_by_name(league.name, cls.name):
raise HTTP_409(
f"League class `{cls.name}` already exists for league `{league.name}`"
)

await LeagueClasses.create(cls)
raise HTTP_404(f"Couldn't find league with name `{league_name}`")

raise HTTP_201(f"League class `{cls.name}` created for league `{cls.league}`")
return classes


@router.get("/{league_name}/classes/{cls}", response_model=LeagueClass)
Expand All @@ -315,6 +326,34 @@ async def get_league_class(
return result


@router.post("/{league_name}/classes", response_model=Message)
async def create_league_class(
cls: LeagueClass,
league_name: str = Path(
title="League Name",
description="Name of the league",
example="Sprintelope 2021",
),
authentication: bool = Depends(require_authentication),
) -> Message:
league = await Leagues.get_by_name(league_name)

if not league:
raise HTTP_404(f"Couldn't find league with name `{cls.league}`")

if league_name != cls.league:
raise HTTP_400("League in body and URL don't match")

if await LeagueClasses.get_by_name(league.name, cls.name):
raise HTTP_409(
f"League class `{cls.name}` already exists for league `{league.name}`"
)

await LeagueClasses.create(cls)

raise HTTP_201(f"League class `{cls.name}` created for league `{cls.league}`")


@router.put("/{league_name}/classes/{class_name}", response_model=Message)
async def update_league_class(
cls: LeagueClass,
Expand Down Expand Up @@ -357,6 +396,25 @@ async def delete_league_class(
return Message(detail=f"League class `{name}` deleted")


@router.get("/{league_name}/groups", response_model=list[LeagueGroup])
async def get_league_groups(
league_name: str = Path(
title="League Name",
description="Name of the league ",
example="Sprintelope 2021",
),
) -> list[LeagueGroup]:
league, groups = await asyncio.gather(
Leagues.get_by_name(league_name),
LeagueGroups.get_by_league(league_name),
)

if not league:
raise HTTP_404(f"Couldn't find league with name `{league_name}`")

return groups


@router.get("/{league_name}/groups/{group}", response_model=LeagueGroup)
async def get_league_group(
league_name: str = Path(
Expand Down

0 comments on commit ba2dd6e

Please sign in to comment.