Modified alembic migration to downgrade properly

Previously, the downgrade was hitting a violation of the old unique
constraint on leaderboard_scores if multiple versions of scores were
stored for the same address.

The modified downgrade only retains the score for each address on the
latest publich version of each leaderboard.
pull/966/head
Neeraj Kashyap 2023-11-21 10:59:17 -08:00
rodzic de2afed559
commit 71e2ffbed3
1 zmienionych plików z 17 dodań i 0 usunięć

Wyświetl plik

@ -105,6 +105,23 @@ def upgrade():
def downgrade():
op.execute(
"""
WITH latest_version_for_leaderboard AS (
SELECT leaderboard_id, MAX(version_number) AS latest_version
FROM leaderboard_versions WHERE published = true
GROUP BY leaderboard_id
)
DELETE FROM leaderboard_scores WHERE
(leaderboard_id, leaderboard_version_number) NOT IN (
SELECT
leaderboard_id,
latest_version AS leaderboard_version_number
FROM
latest_version_for_leaderboard
)
"""
)
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(
op.f("fk_leaderboard_scores_leaderboard_id_leaderboard_versions"),