Use asyncpg for updating tournaments (#523)

fix https://github.com/evroon/bracket/issues/514
This commit is contained in:
Erik Vroon
2024-02-24 13:32:02 +01:00
committed by GitHub
parent 34ea8e85cc
commit 25a9df2f36
2 changed files with 25 additions and 5 deletions

View File

@@ -30,6 +30,7 @@ from bracket.sql.tournaments import (
sql_get_tournament,
sql_get_tournament_by_endpoint_name,
sql_get_tournaments,
sql_update_tournament,
)
from bracket.sql.users import get_user_access_to_club, get_which_clubs_has_user_access_to
from bracket.utils.errors import (
@@ -97,10 +98,7 @@ async def update_tournament_by_id(
_: UserPublic = Depends(user_authenticated_for_tournament),
) -> SuccessResponse:
try:
await database.execute(
query=tournaments.update().where(tournaments.c.id == tournament_id),
values=tournament_body.model_dump(),
)
await sql_update_tournament(tournament_id, tournament_body)
except asyncpg.exceptions.UniqueViolationError as exc:
check_unique_constraint_violation(exc, {UniqueIndex.ix_tournaments_dashboard_endpoint})

View File

@@ -1,7 +1,7 @@
from typing import Any
from bracket.database import database
from bracket.models.db.tournament import Tournament
from bracket.models.db.tournament import Tournament, TournamentUpdateBody
from bracket.utils.id_types import TournamentId
@@ -52,3 +52,25 @@ async def sql_delete_tournament(tournament_id: TournamentId) -> None:
WHERE id = :tournament_id
"""
await database.fetch_one(query=query, values={"tournament_id": tournament_id})
async def sql_update_tournament(
tournament_id: TournamentId, tournament: TournamentUpdateBody
) -> None:
query = """
UPDATE tournaments
SET
start_time = :start_time,
name = :name,
dashboard_public = :dashboard_public,
dashboard_endpoint = :dashboard_endpoint,
players_can_be_in_multiple_teams = :players_can_be_in_multiple_teams,
auto_assign_courts = :auto_assign_courts,
duration_minutes = :duration_minutes,
margin_minutes = :margin_minutes
WHERE tournaments.id = :tournament_id
"""
await database.execute(
query=query,
values={"tournament_id": tournament_id, **tournament.model_dump()},
)