Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,22 @@
Date,
BigInteger
)
from sqlalchemy.ext.declarative import as_declarative
from sqlalchemy.sql import expression, func
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.sqltypes import TIMESTAMP
from werkzeug.security import generate_password_hash, check_password_hash

Base = declarative_base()

@as_declarative()
class Base:

created_at = Column(TIMESTAMP, server_default=func.current_timestamp(), nullable=True)
updated_at = Column(
TIMESTAMP, server_default=func.current_timestamp(), nullable=True, onupdate=func.current_timestamp()
)
is_deleted = Column(Boolean(), default=False)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю избавиться от этого поля. Что-то я не нашёл сценариев его использования. Если брать вариант замены архивации, то лучше не будем этого делать, а то выигрыша нет, а в дебри залезем.

__name__: str


class AdminUser(Base):
Expand Down
90 changes: 90 additions & 0 deletions migrations/versions/976c4b9b4514_update_base_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
"""Update Base model

Revision ID: 976c4b9b4514
Revises: 87c7d29e3ddb
Create Date: 2022-12-26 12:56:27.764392

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision = '976c4b9b4514'
down_revision = '87c7d29e3ddb'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('admin_token_requests', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('admin_token_requests', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('admin_token_requests', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.add_column('admin_users', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('admin_users', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('admin_users', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.add_column('categories', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('categories', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('categories', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.add_column('external_site_users', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('external_site_users', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('external_site_users', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.add_column('notifications', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('notifications', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('notifications', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.add_column('reasons_canceling', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('reasons_canceling', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('reasons_canceling', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.add_column('statistics', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('statistics', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('statistics', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.add_column('tasks', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('tasks', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('tasks', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.execute('UPDATE tasks SET created_at = created_date')
op.execute('UPDATE tasks SET updated_at = updated_date')
op.add_column('users', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('users', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('users', sa.Column('is_deleted', sa.Boolean(), nullable=True))
op.add_column('users_categories', sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('users_categories', sa.Column('updated_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=True))
op.add_column('users_categories', sa.Column('is_deleted', sa.Boolean(), nullable=True))
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('users_categories', sa.Column('audit_id_users_categories', sa.INTEGER(), autoincrement=False, nullable=True))
op.create_foreign_key('users_categories_audit_id_users_categories_fkey', 'users_categories', 'base_audit', ['audit_id_users_categories'], ['id'])

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это что-то из старого кода осталось.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Привет!
У меня вопрос по таблицам:

Таблица Task уже имеет свои аналоги поля created_at, updated_at - поэтому в миграции у них меняется только название, а данные сохраняются.

Но свои аналоги полей created_at, updated_at есть и у других таблиц в БД

  • Statistics имеет одно поле added_date - это не аналог created_at?
  • ReasonCanceling имеет поля added_date, updated_date
  • ExternalSiteUser имеет поля created_date, updated_date

Может для этих таблиц тоже стоит только перепаивать колонки по-новому, а не создавать новые?

@AntonZelinsky скажи, пожалуйста, эти поля (created_date, added_date) схожи у таблиц и подойдут ли им на замену поля базовой модели?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Точно, Аня, спасибо. Ты очень умная и наблюдательная.
Я какое-то костыльное решение предлагаю.(
Там где есть аналогичные колонки которые собирались удалять, не нужно их удалять, а просто переименовать.

op.drop_column('users_categories', 'is_deleted')
op.drop_column('users_categories', 'updated_at')
op.drop_column('users_categories', 'created_at')
op.drop_column('users', 'is_deleted')
op.drop_column('users', 'updated_at')
op.drop_column('users', 'created_at')
op.drop_column('tasks', 'is_deleted')
op.drop_column('tasks', 'updated_at')
op.drop_column('tasks', 'created_at')
op.drop_column('statistics', 'is_deleted')
op.drop_column('statistics', 'updated_at')
op.drop_column('statistics', 'created_at')
op.drop_column('reasons_canceling', 'is_deleted')
op.drop_column('reasons_canceling', 'updated_at')
op.drop_column('reasons_canceling', 'created_at')
op.drop_column('notifications', 'is_deleted')
op.drop_column('notifications', 'updated_at')
op.drop_column('notifications', 'created_at')
op.drop_column('external_site_users', 'is_deleted')
op.drop_column('external_site_users', 'updated_at')
op.drop_column('external_site_users', 'created_at')
op.drop_column('categories', 'is_deleted')
op.drop_column('categories', 'updated_at')
op.drop_column('categories', 'created_at')
op.drop_column('admin_users', 'is_deleted')
op.drop_column('admin_users', 'updated_at')
op.drop_column('admin_users', 'created_at')
op.drop_column('admin_token_requests', 'is_deleted')
op.drop_column('admin_token_requests', 'updated_at')
op.drop_column('admin_token_requests', 'created_at')
# ### end Alembic commands ###