From 8e034766bb7e2d23f88c5ff1a254126f11a5f412 Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Mon, 23 Mar 2026 02:33:54 +0300 Subject: Fix database models --- alembic/versions/5d998cafe1ba_init_database.py | 55 -------------------- alembic/versions/940afc736a0f_init_database.py | 72 ++++++++++++++++++++++++++ models/__init__.py | 2 + models/announcement.py | 5 +- models/suggest.py | 7 ++- models/user.py | 2 + 6 files changed, 85 insertions(+), 58 deletions(-) delete mode 100644 alembic/versions/5d998cafe1ba_init_database.py create mode 100644 alembic/versions/940afc736a0f_init_database.py diff --git a/alembic/versions/5d998cafe1ba_init_database.py b/alembic/versions/5d998cafe1ba_init_database.py deleted file mode 100644 index e55e4ed..0000000 --- a/alembic/versions/5d998cafe1ba_init_database.py +++ /dev/null @@ -1,55 +0,0 @@ -"""init database - -Revision ID: 5d998cafe1ba -Revises: -Create Date: 2026-03-23 00:05:14.621886 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = '5d998cafe1ba' -down_revision: Union[str, Sequence[str], None] = None -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - """Upgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('invoice', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('amount', sa.Float(), nullable=False), - sa.Column('datetime', sa.DateTime(), nullable=False), - sa.PrimaryKeyConstraint('id', name=op.f('pk_invoice')) - ) - op.create_table('user', - sa.Column('id', sa.Integer(), autoincrement=False, nullable=False), - sa.Column('role', sa.Enum('REGULAR', 'ADMIN', name='userrole'), nullable=False), - sa.Column('vpn_link', sa.String(), nullable=False), - sa.PrimaryKeyConstraint('id', name=op.f('pk_user')) - ) - op.create_table('payment', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('invoice_id', sa.Integer(), nullable=False), - sa.Column('receipt_file_id', sa.String(), nullable=False), - sa.Column('datetime', sa.DateTime(), nullable=False), - sa.ForeignKeyConstraint(['invoice_id'], ['invoice.id'], name=op.f('fk_payment_invoice_id_invoice')), - sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_payment_user_id_user')), - sa.PrimaryKeyConstraint('id', name=op.f('pk_payment')) - ) - # ### end Alembic commands ### - - -def downgrade() -> None: - """Downgrade schema.""" - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('payment') - op.drop_table('user') - op.drop_table('invoice') - # ### end Alembic commands ### diff --git a/alembic/versions/940afc736a0f_init_database.py b/alembic/versions/940afc736a0f_init_database.py new file mode 100644 index 0000000..bfaa771 --- /dev/null +++ b/alembic/versions/940afc736a0f_init_database.py @@ -0,0 +1,72 @@ +"""init database + +Revision ID: 940afc736a0f +Revises: +Create Date: 2026-03-23 02:21:35.245634 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa + +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "940afc736a0f" +down_revision: Union[str, Sequence[str], None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_table( + "announcement", + sa.Column("id", sa.Integer(), autoincrement=True, nullable=False), + sa.Column("message", sa.JSON(), nullable=False), + sa.Column("datetime", sa.DateTime(), nullable=False), + sa.PrimaryKeyConstraint("id", name=op.f("pk_announcement")), + ) + op.create_table( + "invoice", + sa.Column("id", sa.Integer(), autoincrement=True, nullable=False), + sa.Column("amount", sa.Float(), nullable=False), + sa.Column("datetime", sa.DateTime(), nullable=False), + sa.PrimaryKeyConstraint("id", name=op.f("pk_invoice")), + ) + op.create_table( + "user", + sa.Column("id", sa.Integer(), autoincrement=False, nullable=False), + sa.Column("role", sa.Enum("REGULAR", "ADMIN", name="userrole"), nullable=False), + sa.Column("vpn_link", sa.String(), nullable=False), + sa.Column("datetime", sa.DateTime(), nullable=False), + sa.PrimaryKeyConstraint("id", name=op.f("pk_user")), + ) + op.create_table( + "payment", + sa.Column("id", sa.Integer(), autoincrement=True, nullable=False), + sa.Column("user_id", sa.Integer(), nullable=False), + sa.Column("invoice_id", sa.Integer(), nullable=False), + sa.Column("receipt_file_id", sa.String(), nullable=False), + sa.Column("datetime", sa.DateTime(), nullable=False), + sa.ForeignKeyConstraint( + ["invoice_id"], ["invoice.id"], name=op.f("fk_payment_invoice_id_invoice") + ), + sa.ForeignKeyConstraint( + ["user_id"], ["user.id"], name=op.f("fk_payment_user_id_user") + ), + sa.PrimaryKeyConstraint("id", name=op.f("pk_payment")), + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table("payment") + op.drop_table("user") + op.drop_table("invoice") + op.drop_table("announcement") + # ### end Alembic commands ### diff --git a/models/__init__.py b/models/__init__.py index 412f467..9d56b33 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -4,6 +4,7 @@ from .rich_text import RichText from .user import User from .invoce import Invoice from .payment import Payment +from .announcement import Announcement # isort: on __all__ = [ @@ -12,4 +13,5 @@ __all__ = [ "Invoice", "Payment", "RichText", + "Announcement", ] diff --git a/models/announcement.py b/models/announcement.py index 9a6eef2..7243684 100644 --- a/models/announcement.py +++ b/models/announcement.py @@ -1,3 +1,5 @@ +from datetime import datetime + from sqlalchemy import JSON from sqlalchemy.orm import Mapped, mapped_column @@ -9,11 +11,12 @@ class Announcement(BaseTable): id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) __message: Mapped[str] = mapped_column("message", JSON()) + datetime: Mapped[datetime] @property def message(self) -> RichText: return RichText.model_validate_json(self.__message) @message.setter - def message_set(self, value: RichText) -> None: + def message(self, value: RichText) -> None: self.__message = value.model_dump_json() diff --git a/models/suggest.py b/models/suggest.py index 1ba18a0..a76a004 100644 --- a/models/suggest.py +++ b/models/suggest.py @@ -1,3 +1,5 @@ +from datetime import datetime + from sqlalchemy import JSON from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql.schema import ForeignKey @@ -13,11 +15,12 @@ class Suggest(BaseTable): user_id: Mapped[int] = mapped_column(ForeignKey(User.id)) suggested_user_id: Mapped[int] __message: Mapped[str] = mapped_column("message", JSON()) + datetime: Mapped[datetime] @property def message(self) -> RichText: return RichText.model_validate_json(self.__message) @message.setter - def message_set(self, value: RichText) -> None: - self.__message = value.model_dump_json() + def message(self, value: RichText) -> None: + self.__message = value.model_dump_json(ensure_ascii=False) diff --git a/models/user.py b/models/user.py index 4983a13..690083c 100644 --- a/models/user.py +++ b/models/user.py @@ -1,3 +1,4 @@ +from datetime import datetime from enum import IntEnum from sqlalchemy.orm import Mapped, mapped_column @@ -16,6 +17,7 @@ class User(BaseTable): id: Mapped[int] = mapped_column(primary_key=True, autoincrement=False) role: Mapped[UserRole] = mapped_column(default=UserRole.REGULAR) vpn_link: Mapped[str] + datetime: Mapped[datetime] def is_regular(self) -> bool: return self.role >= UserRole.REGULAR -- cgit v1.3