Convert to timezone-aware datetime and properly port over DB contents.

This commit is contained in:
Ben Rog-Wilhelm 2023-06-17 04:06:02 -05:00
parent 5271e7c943
commit bd909f394d
3 changed files with 64 additions and 18 deletions

View file

@ -52,7 +52,7 @@ class Comment(CreatedBase):
volunteer_janitor_badness = Column(Float, default=0.5, nullable=False) volunteer_janitor_badness = Column(Float, default=0.5, nullable=False)
# Visibility states here # Visibility states here
state_user_deleted_utc = Column(DateTime, nullable=True) # null if it hasn't been deleted by the user state_user_deleted_utc = Column(DateTime(timezone=True), nullable=True) # null if it hasn't been deleted by the user
# TBD: state_mod # TBD: state_mod
# TBD: state_mod_set_by # TBD: state_mod_set_by
# TBD: state_report # TBD: state_report

View file

@ -53,7 +53,7 @@ class Submission(CreatedBase):
task_id = Column(Integer, ForeignKey("tasks_repeatable_scheduled_submissions.id")) task_id = Column(Integer, ForeignKey("tasks_repeatable_scheduled_submissions.id"))
# Visibility states here # Visibility states here
state_user_deleted_utc = Column(DateTime, nullable=True) # null if it hasn't been deleted by the user state_user_deleted_utc = Column(DateTime(timezone=True), nullable=True) # null if it hasn't been deleted by the user
# TBD: state_mod # TBD: state_mod
# TBD: state_mod_set_by # TBD: state_mod_set_by
# TBD: state_report # TBD: state_report

View file

@ -17,30 +17,76 @@ depends_on = None
def upgrade(): def upgrade():
# ### commands auto generated by Alembic - please adjust! ### op.add_column('comments', sa.Column('state_user_deleted_utc', sa.DateTime(timezone=True), nullable=True))
op.add_column('comments', sa.Column('state_user_deleted_utc', sa.DateTime(), nullable=True)) op.add_column('submissions', sa.Column('state_user_deleted_utc', sa.DateTime(timezone=True), nullable=True))
op.drop_column('comments', 'deleted_utc')
op.add_column('submissions', sa.Column('state_user_deleted_utc', sa.DateTime(), nullable=True))
op.drop_index('subimssion_binary_group_idx', table_name='submissions') op.drop_index('subimssion_binary_group_idx', table_name='submissions')
op.create_index('subimssion_binary_group_idx', 'submissions', ['is_banned', 'state_user_deleted_utc', 'over_18'], unique=False)
op.drop_index('submission_isdeleted_idx', table_name='submissions') op.drop_index('submission_isdeleted_idx', table_name='submissions')
op.create_index('submission_isdeleted_idx', 'submissions', ['state_user_deleted_utc'], unique=False)
op.drop_index('submission_new_sort_idx', table_name='submissions') op.drop_index('submission_new_sort_idx', table_name='submissions')
op.create_index('submission_new_sort_idx', 'submissions', ['is_banned', 'state_user_deleted_utc', sa.text('created_utc DESC'), 'over_18'], unique=False)
op.execute("""
UPDATE comments
SET state_user_deleted_utc =
CASE
WHEN deleted_utc > 0 THEN
(timestamp 'epoch' + deleted_utc * interval '1 second') at time zone 'utc'
ELSE NULL
END
""")
op.execute("""
UPDATE submissions
SET state_user_deleted_utc =
CASE
WHEN deleted_utc > 0 THEN
(timestamp 'epoch' + deleted_utc * interval '1 second') at time zone 'utc'
ELSE NULL
END
""")
op.drop_column('comments', 'deleted_utc')
op.drop_column('submissions', 'deleted_utc') op.drop_column('submissions', 'deleted_utc')
# ### end Alembic commands ###
op.create_index('subimssion_binary_group_idx', 'submissions', ['is_banned', 'state_user_deleted_utc', 'over_18'], unique=False)
op.create_index('submission_isdeleted_idx', 'submissions', ['state_user_deleted_utc'], unique=False)
op.create_index('submission_new_sort_idx', 'submissions', ['is_banned', 'state_user_deleted_utc', sa.text('created_utc DESC'), 'over_18'], unique=False)
def downgrade(): def downgrade():
# ### commands auto generated by Alembic - please adjust! ### op.add_column('comments', sa.Column('deleted_utc', sa.INTEGER(), server_default=sa.text('0'), autoincrement=False, nullable=True))
op.add_column('submissions', sa.Column('deleted_utc', sa.INTEGER(), server_default=sa.text('0'), autoincrement=False, nullable=False)) op.add_column('submissions', sa.Column('deleted_utc', sa.INTEGER(), server_default=sa.text('0'), autoincrement=False, nullable=True))
op.drop_index('submission_new_sort_idx', table_name='submissions') op.drop_index('submission_new_sort_idx', table_name='submissions')
op.create_index('submission_new_sort_idx', 'submissions', ['is_banned', 'deleted_utc', 'created_utc', 'over_18'], unique=False)
op.drop_index('submission_isdeleted_idx', table_name='submissions') op.drop_index('submission_isdeleted_idx', table_name='submissions')
op.create_index('submission_isdeleted_idx', 'submissions', ['deleted_utc'], unique=False)
op.drop_index('subimssion_binary_group_idx', table_name='submissions') op.drop_index('subimssion_binary_group_idx', table_name='submissions')
op.create_index('subimssion_binary_group_idx', 'submissions', ['is_banned', 'deleted_utc', 'over_18'], unique=False)
op.drop_column('submissions', 'state_user_deleted_utc') op.execute("""
op.add_column('comments', sa.Column('deleted_utc', sa.INTEGER(), server_default=sa.text('0'), autoincrement=False, nullable=False)) UPDATE comments
SET deleted_utc =
COALESCE(
EXTRACT(EPOCH FROM state_user_deleted_utc)::integer,
0
)
""")
op.execute("""
UPDATE submissions
SET deleted_utc =
COALESCE(
EXTRACT(EPOCH FROM state_user_deleted_utc)::integer,
0
)
""")
op.alter_column('comments', 'deleted_utc', nullable=False)
op.alter_column('submissions', 'deleted_utc', nullable=False)
op.drop_column('comments', 'state_user_deleted_utc') op.drop_column('comments', 'state_user_deleted_utc')
# ### end Alembic commands ### op.drop_column('submissions', 'state_user_deleted_utc')
op.create_index('submission_new_sort_idx', 'submissions', ['is_banned', 'deleted_utc', 'created_utc', 'over_18'], unique=False)
op.create_index('submission_isdeleted_idx', 'submissions', ['deleted_utc'], unique=False)
op.create_index('subimssion_binary_group_idx', 'submissions', ['is_banned', 'deleted_utc', 'over_18'], unique=False)