chore: Small improvements in database structure

This commit is contained in:
ITQ
2024-03-21 18:33:46 +03:00
parent 3226e090f5
commit 597d629954
3 changed files with 55 additions and 43 deletions
@@ -0,0 +1,42 @@
"""Added user model
Revision ID: 50fa8edaaf94
Revises:
Create Date: 2024-03-21 18:31:15.864426
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '50fa8edaaf94'
down_revision: Union[str, None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('users',
sa.Column('telegram_id', sa.BigInteger(), nullable=False),
sa.Column('username', sa.String(length=20), nullable=False),
sa.Column('age', sa.SmallInteger(), nullable=False),
sa.Column('bio', sa.String(length=100), nullable=True),
sa.Column('sex', sa.String(length=6), nullable=True),
sa.Column('country', sa.Text(), nullable=False),
sa.Column('city', sa.Text(), nullable=False),
sa.PrimaryKeyConstraint('telegram_id'),
sa.UniqueConstraint('username')
)
op.create_index(op.f('ix_users_telegram_id'), 'users', ['telegram_id'], unique=False)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f('ix_users_telegram_id'), table_name='users')
op.drop_table('users')
# ### end Alembic commands ###
@@ -1,42 +0,0 @@
"""Added User model
Revision ID: 5896f08fbd61
Revises:
Create Date: 2024-03-19 23:25:50.458639
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '5896f08fbd61'
down_revision: Union[str, None] = None
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
'users',
sa.Column('telegram_id', sa.Integer(), nullable=False),
sa.Column('username', sa.String(length=20), nullable=False),
sa.Column('age', sa.SmallInteger(), nullable=False),
sa.Column('bio', sa.String(length=100), nullable=True),
sa.Column('sex', sa.String(length=6), nullable=True),
sa.Column('country', sa.Text(), nullable=False),
sa.Column('city', sa.Text(), nullable=False),
sa.PrimaryKeyConstraint('telegram_id'),
sa.UniqueConstraint('username'),
)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('users')
# ### end Alembic commands ###
+13 -1
View File
@@ -17,7 +17,7 @@ Base: Any = declarative_base()
class User(Base):
__tablename__ = "users"
telegram_id = sa.Column(sa.Integer, primary_key=True)
telegram_id = sa.Column(sa.BigInteger, primary_key=True, index=True)
username = sa.Column(sa.String(20), nullable=False, unique=True)
age = sa.Column(sa.SmallInteger, nullable=False)
bio = sa.Column(sa.String(100), nullable=True)
@@ -35,6 +35,9 @@ class User(Base):
re.match(regex_pattern, value) is not None
), "a-z, A-Z, 0-9, _ only allowed in username."
if session.query(User).filter(User.username == value).first():
raise AssertionError("Username is already taken.")
return value
@validates("age")
@@ -53,6 +56,15 @@ class User(Base):
return value
@validates("sex")
def validate_sex(self, key, value):
assert value in [
"male",
"female",
], "Invalid input. Please try again."
return value
@validates("country")
def validate_country(self, key, value):
verdict, normalized_value = geo.validate_country(