From 536d022e8a55f6e53f01dfb7e0fae2ef24385aad Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Sun, 22 Mar 2026 19:56:47 +0300 Subject: Init project --- models/__init__.py | 11 +++++++++++ models/announcement.py | 18 ++++++++++++++++++ models/base.py | 14 ++++++++++++++ models/invoce.py | 13 +++++++++++++ models/payment.py | 16 ++++++++++++++++ models/user.py | 9 +++++++++ 6 files changed, 81 insertions(+) create mode 100644 models/__init__.py create mode 100644 models/announcement.py create mode 100644 models/base.py create mode 100644 models/invoce.py create mode 100644 models/payment.py create mode 100644 models/user.py (limited to 'models') diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..70c841d --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,11 @@ +# isort: off +from .base import BaseTable +from .user import User +from .invoce import Invoice +# isort: on + +__all__ = [ + "BaseTable", + "User", + "Invoice", +] diff --git a/models/announcement.py b/models/announcement.py new file mode 100644 index 0000000..5f752d7 --- /dev/null +++ b/models/announcement.py @@ -0,0 +1,18 @@ +from aiogram.types import MessageEntity +from pydantic import BaseModel +from sqlalchemy import JSON +from sqlalchemy.orm import Mapped, mapped_column + +from models import BaseTable + + +class Message(BaseModel): + text: str + entities: list[MessageEntity] = [] + + +class Announcement(BaseTable): + __tablename__ = "announcement" + + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) + message: Mapped[str] = mapped_column(JSON()) diff --git a/models/base.py b/models/base.py new file mode 100644 index 0000000..98f3c95 --- /dev/null +++ b/models/base.py @@ -0,0 +1,14 @@ +from sqlalchemy import MetaData +from sqlalchemy.orm import DeclarativeBase + + +class BaseTable(DeclarativeBase): + metadata = MetaData( + naming_convention={ + "ix": "ix_%(column_0_label)s", + "uq": "uq_%(table_name)s_%(column_0_name)s", + "ck": "ck_%(table_name)s_%(constraint_name)s", + "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", + "pk": "pk_%(table_name)s", + } + ) diff --git a/models/invoce.py b/models/invoce.py new file mode 100644 index 0000000..54a445e --- /dev/null +++ b/models/invoce.py @@ -0,0 +1,13 @@ +from datetime import datetime + +from sqlalchemy.orm import Mapped, mapped_column + +from models import BaseTable + + +class Invoice(BaseTable): + __tablename__ = "invoice" + + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) + amount: Mapped[float] + datetime: Mapped[datetime] diff --git a/models/payment.py b/models/payment.py new file mode 100644 index 0000000..2b1cb90 --- /dev/null +++ b/models/payment.py @@ -0,0 +1,16 @@ +from datetime import datetime + +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column + +from models import BaseTable, Invoice, User + + +class Payment(BaseTable): + __tablename__ = "payment" + + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) + user_id: Mapped[int] = mapped_column(ForeignKey(User.id)) + invoice_id: Mapped[int] = mapped_column(ForeignKey(Invoice.id)) + receipt_file_id: Mapped[str] + datetime: Mapped[datetime] diff --git a/models/user.py b/models/user.py new file mode 100644 index 0000000..7118725 --- /dev/null +++ b/models/user.py @@ -0,0 +1,9 @@ +from sqlalchemy.orm import Mapped, mapped_column + +from models import BaseTable + + +class User(BaseTable): + __tablename__ = "user" + + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=False) -- cgit v1.3