From eb78ec61690c00550d90be4379e4ac95917b49ce Mon Sep 17 00:00:00 2001 From: Viet Than Date: Fri, 28 Jul 2023 05:41:11 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=A6=20Database=20Change:=20convert=20c?= =?UTF-8?q?reated=20utc=20to=20datetimez=20for=20flags=20(#633)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/classes/flags.py | 2 +- files/classes/submission.py | 2 +- ...8b_change_created_utc_to_datetimez_for_.py | 51 +++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 migrations/versions/2023_07_28_05_33_16_bdb4b7a2e88b_change_created_utc_to_datetimez_for_.py diff --git a/files/classes/flags.py b/files/classes/flags.py index 3f74c720a..80c5cc37b 100644 --- a/files/classes/flags.py +++ b/files/classes/flags.py @@ -6,7 +6,7 @@ from files.helpers.config.const import * -class Flag(CreatedBase): +class Flag(CreatedDateTimeBase): __tablename__ = "flags" id = Column(Integer, primary_key=True) diff --git a/files/classes/submission.py b/files/classes/submission.py index 1857d3a88..4346cea2e 100644 --- a/files/classes/submission.py +++ b/files/classes/submission.py @@ -141,7 +141,7 @@ class Submission(CreatedBase): @lazy def flags(self, v): - flags = g.db.query(Flag).filter_by(post_id=self.id).order_by(Flag.created_utc).all() + flags = g.db.query(Flag).filter_by(post_id=self.id).order_by(Flag.created_datetimez).all() if not (v and (v.shadowbanned or v.admin_level >= 3)): for flag in flags: if flag.user.shadowbanned: diff --git a/migrations/versions/2023_07_28_05_33_16_bdb4b7a2e88b_change_created_utc_to_datetimez_for_.py b/migrations/versions/2023_07_28_05_33_16_bdb4b7a2e88b_change_created_utc_to_datetimez_for_.py new file mode 100644 index 000000000..ab666be74 --- /dev/null +++ b/migrations/versions/2023_07_28_05_33_16_bdb4b7a2e88b_change_created_utc_to_datetimez_for_.py @@ -0,0 +1,51 @@ +"""Change created_utc to datetimez for flags + +Revision ID: bdb4b7a2e88b +Revises: 55488ee27b00 +Create Date: 2023-07-28 05:33:16.984823+00:00 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.sql.functions import now + + +# revision identifiers, used by Alembic. +revision = 'bdb4b7a2e88b' +down_revision = '55488ee27b00' +branch_labels = None +depends_on = None + + +table_name = 'flags' +from_column = 'created_utc' +to_column = 'created_datetimez' + +def upgrade(): + op.add_column(table_name, sa.Column(to_column, sa.DateTime(timezone=True), server_default=now(), nullable=True)) + op.execute(f""" + UPDATE {table_name} + SET {to_column} = + CASE + WHEN {from_column} > 0 THEN + (timestamp 'epoch' + {from_column} * interval '1 second') at time zone 'utc' + ELSE NULL + END + """) + + op.alter_column(table_name, to_column, nullable=False) + op.drop_column(table_name, from_column) + + +def downgrade(): + op.add_column(table_name, sa.Column(from_column, sa.Integer(), server_default=sa.text('0'), nullable=True)) + op.execute(f""" + UPDATE {table_name} + SET {from_column} = + COALESCE( + EXTRACT(EPOCH FROM {to_column})::integer, + 0 + ) + """) + op.alter_column(table_name, from_column, nullable=False) + op.drop_column(table_name, to_column)