diff options
Diffstat (limited to 'models')
| -rw-r--r-- | models/__init__.py | 8 | ||||
| -rw-r--r-- | models/callback_data.py | 9 | ||||
| -rw-r--r-- | models/payment.py | 52 | ||||
| -rw-r--r-- | models/suggest.py | 3 |
4 files changed, 65 insertions, 7 deletions
diff --git a/models/__init__.py b/models/__init__.py index 0547429..f26ee74 100644 --- a/models/__init__.py +++ b/models/__init__.py | |||
| @@ -1,9 +1,9 @@ | |||
| 1 | # isort: off | 1 | # isort: off |
| 2 | from .base import BaseTable | 2 | from .base import BaseTable |
| 3 | from .rich_text import RichText | 3 | from .rich_text import RichText |
| 4 | from .user import User | 4 | from .user import User, UserRole |
| 5 | from .invoce import Invoice | 5 | from .invoce import Invoice |
| 6 | from .payment import Payment | 6 | from .payment import Payment, PaymentStatus, ReceiptFile, ReceiptFileType |
| 7 | from .announcement import Announcement | 7 | from .announcement import Announcement |
| 8 | from . import callback_data | 8 | from . import callback_data |
| 9 | # isort: on | 9 | # isort: on |
| @@ -11,8 +11,12 @@ from . import callback_data | |||
| 11 | __all__ = [ | 11 | __all__ = [ |
| 12 | "BaseTable", | 12 | "BaseTable", |
| 13 | "User", | 13 | "User", |
| 14 | "UserRole", | ||
| 14 | "Invoice", | 15 | "Invoice", |
| 15 | "Payment", | 16 | "Payment", |
| 17 | "PaymentStatus", | ||
| 18 | "ReceiptFile", | ||
| 19 | "ReceiptFileType", | ||
| 16 | "RichText", | 20 | "RichText", |
| 17 | "Announcement", | 21 | "Announcement", |
| 18 | "callback_data", | 22 | "callback_data", |
diff --git a/models/callback_data.py b/models/callback_data.py index d3e6d61..137c4fa 100644 --- a/models/callback_data.py +++ b/models/callback_data.py | |||
| @@ -1,5 +1,12 @@ | |||
| 1 | from aiogram.filters.callback_data import CallbackData | 1 | from aiogram.filters.callback_data import CallbackData |
| 2 | 2 | ||
| 3 | from models import PaymentStatus | ||
| 3 | 4 | ||
| 4 | class PayInvoiceData(CallbackData, prefix="pay_invoice"): | 5 | |
| 6 | class PayInvoiceClb(CallbackData, prefix="pay_invoice"): | ||
| 5 | invoice_id: int | 7 | invoice_id: int |
| 8 | |||
| 9 | |||
| 10 | class PaymentStatusClb(CallbackData, prefix="payment_status"): | ||
| 11 | payment_id: int | ||
| 12 | payment_status: PaymentStatus | ||
diff --git a/models/payment.py b/models/payment.py index 2b1cb90..afae642 100644 --- a/models/payment.py +++ b/models/payment.py | |||
| @@ -1,16 +1,64 @@ | |||
| 1 | from datetime import datetime | 1 | from datetime import datetime |
| 2 | from enum import StrEnum, auto | ||
| 2 | 3 | ||
| 3 | from sqlalchemy import ForeignKey | 4 | from aiogram import Bot |
| 5 | from aiogram.types import Message, ReplyMarkupUnion | ||
| 6 | from pydantic import BaseModel | ||
| 7 | from sqlalchemy import JSON, ForeignKey | ||
| 4 | from sqlalchemy.orm import Mapped, mapped_column | 8 | from sqlalchemy.orm import Mapped, mapped_column |
| 5 | 9 | ||
| 6 | from models import BaseTable, Invoice, User | 10 | from models import BaseTable, Invoice, User |
| 7 | 11 | ||
| 8 | 12 | ||
| 13 | class ReceiptFileType(StrEnum): | ||
| 14 | PHOTO = auto() | ||
| 15 | DOCUMENT = auto() | ||
| 16 | |||
| 17 | |||
| 18 | class ReceiptFile(BaseModel): | ||
| 19 | type: ReceiptFileType | ||
| 20 | file_id: str | ||
| 21 | |||
| 22 | async def send( | ||
| 23 | self, | ||
| 24 | bot: Bot, | ||
| 25 | user_id: int, | ||
| 26 | reply_markup: ReplyMarkupUnion | None = None, | ||
| 27 | ) -> Message: | ||
| 28 | if self.type == ReceiptFileType.DOCUMENT: | ||
| 29 | return await bot.send_document( | ||
| 30 | user_id, | ||
| 31 | document=self.file_id, | ||
| 32 | reply_markup=reply_markup, | ||
| 33 | ) | ||
| 34 | else: | ||
| 35 | return await bot.send_photo( | ||
| 36 | user_id, | ||
| 37 | photo=self.file_id, | ||
| 38 | reply_markup=reply_markup, | ||
| 39 | ) | ||
| 40 | |||
| 41 | |||
| 42 | class PaymentStatus(StrEnum): | ||
| 43 | PENDING = auto() | ||
| 44 | ACCEPTED = auto() | ||
| 45 | REJECTED = auto() | ||
| 46 | |||
| 47 | |||
| 9 | class Payment(BaseTable): | 48 | class Payment(BaseTable): |
| 10 | __tablename__ = "payment" | 49 | __tablename__ = "payment" |
| 11 | 50 | ||
| 12 | id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) | 51 | id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) |
| 13 | user_id: Mapped[int] = mapped_column(ForeignKey(User.id)) | 52 | user_id: Mapped[int] = mapped_column(ForeignKey(User.id)) |
| 14 | invoice_id: Mapped[int] = mapped_column(ForeignKey(Invoice.id)) | 53 | invoice_id: Mapped[int] = mapped_column(ForeignKey(Invoice.id)) |
| 15 | receipt_file_id: Mapped[str] | 54 | __receipt_file: Mapped[str] = mapped_column("receipt_file", JSON()) |
| 55 | status: Mapped[PaymentStatus] = mapped_column(default=PaymentStatus.PENDING) | ||
| 16 | datetime: Mapped[datetime] | 56 | datetime: Mapped[datetime] |
| 57 | |||
| 58 | @property | ||
| 59 | def receipt_file(self) -> ReceiptFile: | ||
| 60 | return ReceiptFile.model_validate_json(self.__receipt_file) | ||
| 61 | |||
| 62 | @receipt_file.setter | ||
| 63 | def receipt_file(self, value: ReceiptFile) -> None: | ||
| 64 | self.__receipt_file = value.model_dump_json() | ||
diff --git a/models/suggest.py b/models/suggest.py index a76a004..bd628bb 100644 --- a/models/suggest.py +++ b/models/suggest.py | |||
| @@ -4,8 +4,7 @@ from sqlalchemy import JSON | |||
| 4 | from sqlalchemy.orm import Mapped, mapped_column | 4 | from sqlalchemy.orm import Mapped, mapped_column |
| 5 | from sqlalchemy.sql.schema import ForeignKey | 5 | from sqlalchemy.sql.schema import ForeignKey |
| 6 | 6 | ||
| 7 | from models import RichText, User | 7 | from models import BaseTable, RichText, User |
| 8 | from models.base import BaseTable | ||
| 9 | 8 | ||
| 10 | 9 | ||
| 11 | class Suggest(BaseTable): | 10 | class Suggest(BaseTable): |
