From 25a9df2f36bd0230e3209ba1c476f3b6d6541bca Mon Sep 17 00:00:00 2001 From: Erik Vroon Date: Sat, 24 Feb 2024 13:32:02 +0100 Subject: [PATCH] Use asyncpg for updating tournaments (#523) fix https://github.com/evroon/bracket/issues/514 --- backend/bracket/routes/tournaments.py | 6 ++---- backend/bracket/sql/tournaments.py | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/backend/bracket/routes/tournaments.py b/backend/bracket/routes/tournaments.py index a405851c..f7de50f8 100644 --- a/backend/bracket/routes/tournaments.py +++ b/backend/bracket/routes/tournaments.py @@ -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}) diff --git a/backend/bracket/sql/tournaments.py b/backend/bracket/sql/tournaments.py index 35248b97..a4130abf 100644 --- a/backend/bracket/sql/tournaments.py +++ b/backend/bracket/sql/tournaments.py @@ -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()}, + )