aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
Diffstat (limited to 'models')
-rw-r--r--models/__init__.py8
-rw-r--r--models/callback_data.py9
-rw-r--r--models/payment.py52
-rw-r--r--models/suggest.py3
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
2from .base import BaseTable 2from .base import BaseTable
3from .rich_text import RichText 3from .rich_text import RichText
4from .user import User 4from .user import User, UserRole
5from .invoce import Invoice 5from .invoce import Invoice
6from .payment import Payment 6from .payment import Payment, PaymentStatus, ReceiptFile, ReceiptFileType
7from .announcement import Announcement 7from .announcement import Announcement
8from . import callback_data 8from . 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 @@
1from aiogram.filters.callback_data import CallbackData 1from aiogram.filters.callback_data import CallbackData
2 2
3from models import PaymentStatus
3 4
4class PayInvoiceData(CallbackData, prefix="pay_invoice"): 5
6class PayInvoiceClb(CallbackData, prefix="pay_invoice"):
5 invoice_id: int 7 invoice_id: int
8
9
10class 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 @@
1from datetime import datetime 1from datetime import datetime
2from enum import StrEnum, auto
2 3
3from sqlalchemy import ForeignKey 4from aiogram import Bot
5from aiogram.types import Message, ReplyMarkupUnion
6from pydantic import BaseModel
7from sqlalchemy import JSON, ForeignKey
4from sqlalchemy.orm import Mapped, mapped_column 8from sqlalchemy.orm import Mapped, mapped_column
5 9
6from models import BaseTable, Invoice, User 10from models import BaseTable, Invoice, User
7 11
8 12
13class ReceiptFileType(StrEnum):
14 PHOTO = auto()
15 DOCUMENT = auto()
16
17
18class 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
42class PaymentStatus(StrEnum):
43 PENDING = auto()
44 ACCEPTED = auto()
45 REJECTED = auto()
46
47
9class Payment(BaseTable): 48class 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
4from sqlalchemy.orm import Mapped, mapped_column 4from sqlalchemy.orm import Mapped, mapped_column
5from sqlalchemy.sql.schema import ForeignKey 5from sqlalchemy.sql.schema import ForeignKey
6 6
7from models import RichText, User 7from models import BaseTable, RichText, User
8from models.base import BaseTable
9 8
10 9
11class Suggest(BaseTable): 10class Suggest(BaseTable):