Files
CTFd/migrations/versions/24ad6790bc3c_convert_rating_values_to_votes.py
gkr 2e06f92c64
Some checks are pending
Linting / Linting (3.11) (push) Waiting to run
Mirror core-theme / mirror (push) Waiting to run
init CTFd source
2025-12-25 09:39:21 +08:00

46 lines
1.3 KiB
Python

"""Convert rating values to votes
Revision ID: 24ad6790bc3c
Revises: 55623b100da8
Create Date: 2025-09-03 05:19:54.151054
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "24ad6790bc3c"
down_revision = "55623b100da8"
branch_labels = None
depends_on = None
def upgrade():
# Convert 5-star ratings to upvote/downvote system
# Values 1-2 become -1 (downvote)
# Values 3-5 become 1 (upvote)
connection = op.get_bind()
# Update ratings with values 1 or 2 to -1 (downvote)
connection.execute(sa.text("UPDATE ratings SET value = -1 WHERE value IN (1, 2)"))
# Update ratings with values 3, 4, or 5 to 1 (upvote)
connection.execute(sa.text("UPDATE ratings SET value = 1 WHERE value IN (3, 4, 5)"))
def downgrade():
# This downgrade is not reversible since we lose the original 5-star granularity
# We can only convert back to a simplified 5-star system
# -1 (downvote) becomes 1 (1 star)
# 1 (upvote) becomes 5 (5 stars)
connection = op.get_bind()
# Convert downvotes (-1) to 1-star ratings
connection.execute(sa.text("UPDATE ratings SET value = 1 WHERE value = -1"))
# Convert upvotes (1) to 5-star ratings
connection.execute(sa.text("UPDATE ratings SET value = 5 WHERE value = 1"))