shop_system_models 0.0.1.dev27006__tar.gz → 0.0.1.dev27337__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/PKG-INFO +1 -1
  2. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/pyproject.toml +1 -1
  3. shop_system_models-0.0.1.dev27337/shop_system_models/shop_api/shop/request/details.py +19 -0
  4. shop_system_models-0.0.1.dev27337/shop_system_models/shop_api/shop/request/orders.py +171 -0
  5. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/extra_product_options.py +1 -0
  6. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/products.py +1 -0
  7. shop_system_models-0.0.1.dev27006/shop_system_models/shop_api/shop/request/details.py +0 -37
  8. shop_system_models-0.0.1.dev27006/shop_system_models/shop_api/shop/request/orders.py +0 -150
  9. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/README.md +0 -0
  10. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/__init__.py +0 -0
  11. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/__init__.pyi +0 -0
  12. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/__init__.py +0 -0
  13. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/__init__.pyi +0 -0
  14. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/country_codes.py +0 -0
  15. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/country_codes.pyi +0 -0
  16. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/enums.py +0 -0
  17. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/enums.pyi +0 -0
  18. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/languages.py +0 -0
  19. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/languages.pyi +0 -0
  20. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/messages/admin.py +0 -0
  21. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/messages/locales/en.json +0 -0
  22. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/messages/locales/ru.json +0 -0
  23. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/consts/messages/mapping.py +0 -0
  24. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/__init__.py +0 -0
  25. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/__init__.pyi +0 -0
  26. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/authorization.py +0 -0
  27. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/bot.py +0 -0
  28. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/nocodb.py +0 -0
  29. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/premium.py +0 -0
  30. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/processes.py +0 -0
  31. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/services.py +0 -0
  32. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/shop_categories.py +0 -0
  33. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/shop_content/blocks.py +0 -0
  34. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/shop_content/delivery_types.py +0 -0
  35. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/shop_content/payment_methods.py +0 -0
  36. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/shop_templates.py +0 -0
  37. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/shops.py +0 -0
  38. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/tasks.py +0 -0
  39. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/users.py +0 -0
  40. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/request/web_app_url.py +0 -0
  41. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/response/general.py +0 -0
  42. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/response/permissions.py +0 -0
  43. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/response/premium.py +0 -0
  44. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/response/shops.py +0 -0
  45. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/response/simple_responses.py +0 -0
  46. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/response/web_app_url.py +0 -0
  47. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/shared.py +0 -0
  48. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/shared.pyi +0 -0
  49. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/users.py +0 -0
  50. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/deployment_api/users.pyi +0 -0
  51. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/py.typed +0 -0
  52. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/__init__.py +0 -0
  53. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/__init__.pyi +0 -0
  54. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/bot/__init__.py +0 -0
  55. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/bot/request.py +0 -0
  56. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/bot/response.py +0 -0
  57. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/commands/__init__.py +0 -0
  58. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/commands/request.py +0 -0
  59. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/commands/response.py +0 -0
  60. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/links.py +0 -0
  61. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/processes/__init__.py +0 -0
  62. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/processes/request.py +0 -0
  63. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/processes/response.py +0 -0
  64. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shared.py +0 -0
  65. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/__init__.py +0 -0
  66. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/request/__init__.py +0 -0
  67. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/request/baskets.py +0 -0
  68. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/request/categories.py +0 -0
  69. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/request/coupons.py +0 -0
  70. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/request/payment_methods.py +0 -0
  71. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/request/products.py +0 -0
  72. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/request/review.py +0 -0
  73. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/request/shop.py +0 -0
  74. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/__init__.py +0 -0
  75. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/basic.py +0 -0
  76. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/baskets.py +0 -0
  77. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/categories.py +0 -0
  78. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/coupons.py +0 -0
  79. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/initialization_data.py +0 -0
  80. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/orders.py +0 -0
  81. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/payment_methods.py +0 -0
  82. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/review.py +0 -0
  83. {shop_system_models-0.0.1.dev27006 → shop_system_models-0.0.1.dev27337}/shop_system_models/shop_api/shop/response/users.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: shop_system_models
3
- Version: 0.0.1.dev27006
3
+ Version: 0.0.1.dev27337
4
4
  Summary: Shared model definitions for shop system services
5
5
  Author: Pavel Mulin
6
6
  Author-email: pavel@tg-shops.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "shop_system_models"
3
- version = "0.0.1.dev27006"
3
+ version = "0.0.1.dev27337"
4
4
  description = "Shared model definitions for shop system services"
5
5
  authors = ["Pavel Mulin <pavel@tg-shops.com>"]
6
6
  readme = "README.md"
@@ -0,0 +1,19 @@
1
+ from datetime import datetime
2
+ from typing import Optional
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+
7
+
8
+ class NocoDBConfig(BaseModel):
9
+ nocodb_project_id: Optional[str] = None
10
+ nocodb_categories_table: Optional[str] = None
11
+ nocodb_products_table: Optional[str] = None
12
+ nocodb_orders_table: Optional[str] = None
13
+ nocodb_status_table: Optional[str] = None
14
+ nocodb_bot_commands_table: Optional[str] = None
15
+ nocodb_options_table: Optional[str] = ""
16
+ nocodb_options_category_table: Optional[str] = ""
17
+
18
+
19
+
@@ -0,0 +1,171 @@
1
+ from datetime import datetime
2
+ from typing import Optional, List, Dict, Any, Union
3
+ from pydantic import Field, field_validator, BaseModel
4
+
5
+ from shop_system_models.shop_api.shop.response.baskets import UserBasketResponseModelV2
6
+ from pydantic_core.core_schema import ValidationInfo
7
+ from shop_system_models.consts.country_codes import ISO3166
8
+
9
+
10
+
11
+ class ExtraFieldPayload(BaseModel):
12
+ name: str
13
+ value: str
14
+
15
+
16
+ class OrderDeliveryTypeModel(BaseModel):
17
+ name: str
18
+ address: str | None = ""
19
+ amount: float | None = 0.0
20
+ extra_fields_payload: list[ExtraFieldPayload] | None = []
21
+
22
+
23
+ class Coordinates(BaseModel):
24
+ latitude: float | None = None
25
+ longitude: float | None = None
26
+
27
+
28
+ class AddressModel(BaseModel):
29
+ coordinates: Coordinates | None = None
30
+ address: str | None = None
31
+
32
+
33
+ class ExtraField(BaseModel):
34
+ name: str
35
+ description: str
36
+ is_required: bool | None
37
+
38
+
39
+ class DeliveryTypeModel(BaseModel):
40
+ name: str
41
+ amount: float = 0.0
42
+ is_address_required: bool | None = False
43
+ address_hint: str | None = ""
44
+ extra_fields: list[ExtraField] = []
45
+ is_timepicker_required: bool = False
46
+ details: str | None = ""
47
+ country: str | None = ""
48
+ country_code: str | None = "" # ISO format, ex.: RU, KZ, BY...
49
+ city: str | None = ""
50
+ delivery_location: Coordinates | None = None
51
+ delivery_radius: int | None = None
52
+ delivery_min_hour: int | None = None
53
+ delivery_max_hour: int | None = None
54
+ delivery_minutes_interval: int | None = None
55
+ delivery_min_day: int | None = None
56
+ delivery_max_day: int | None = None
57
+
58
+ @field_validator("country_code", mode="before")
59
+ def set_country_code(cls, value, values: ValidationInfo):
60
+ country_code_upper = value.upper()
61
+ if ISO3166.get(country_code_upper):
62
+ return country_code_upper
63
+ return "RU"
64
+
65
+
66
+ def format_order_number(order_count: int) -> str:
67
+ return f"#{order_count:04}"
68
+
69
+
70
+ """
71
+ {
72
+ "user_id": 123,
73
+ "basket_id": None,
74
+ "basket": None,
75
+ "status": "booking_request",
76
+ "delivery": None,
77
+ "delivery_date_from": None,
78
+ "user_contact_number": None,
79
+ "client_coordinates": None,
80
+ "comment": "",# НАДО
81
+ "payment_type_id": # НАДО
82
+ "preview_url": ''
83
+ "booking_details": {
84
+ "booking_id": "123123",
85
+ "from_date": datetime.now(),
86
+ "till_date": datetime.now(),
87
+ "item_id": "123123",
88
+ }
89
+ }"""
90
+
91
+
92
+ class BookingOrderModel(BaseModel):
93
+ booking_id: str
94
+ from_date: datetime
95
+ till_date: datetime
96
+ item_id: str
97
+
98
+
99
+ class CreateOrderModel(BaseModel):
100
+ delivery: OrderDeliveryTypeModel | None = None
101
+ delivery_date_from: datetime = Field(default_factory=datetime.now)
102
+ comment: str | None = None
103
+ user_contact_number: str | None = None
104
+ payment_type_id: str | None = None
105
+ booking_details: BookingOrderModel | None = None
106
+ preview_url: str | None = ""
107
+
108
+
109
+ class OrderPaymentDetails(BaseModel):
110
+ title: str
111
+ description: str
112
+ expires_at: datetime
113
+ link: str
114
+
115
+
116
+ class OrderModel(CreateOrderModel):
117
+ basket: UserBasketResponseModelV2
118
+ user_id: str | None = None
119
+ basket_id: str | None = None
120
+ status: str | None = None
121
+ client_coordinates: AddressModel | None = None
122
+ created: datetime = datetime.now()
123
+ updated: datetime = datetime.now()
124
+ order_number: str = "#0001"
125
+ process_key: int | None = None
126
+ coupon: str | None = None
127
+ admin_message_id: str | None = None
128
+
129
+ payment_data: OrderPaymentDetails | None = None
130
+
131
+
132
+ class LabeledPrice(BaseModel):
133
+ label: str
134
+ amount: int
135
+
136
+
137
+ class InvoiceBaseModel(BaseModel):
138
+ chat_id: int
139
+ order_id: str
140
+ order_number: str # order_number
141
+ payload: str # <basket_id>_<order_id>_<order_number> from OrderResponseModel --> its subscription key
142
+ amount: float
143
+ currency: str # fiat
144
+ payment_address: str
145
+ payment_timeout: int | None = None
146
+
147
+
148
+ class InvoiceTGMessageModel(InvoiceBaseModel):
149
+ description: str # order_products
150
+ provider_data: str | None = None
151
+ prices: list[LabeledPrice] # label and amount in coins!
152
+ need_name: bool | None = False
153
+ need_phone_number: bool | None = False
154
+ need_email: bool | None = False
155
+ send_phone_number_to_provider: bool | None = False
156
+ send_email_to_provider: bool | None = False
157
+ is_flexible: bool | None = False
158
+ reply_markup: bool | None = None
159
+
160
+
161
+ class InvoiceWithPaymentLinkMessageModel(InvoiceBaseModel):
162
+ payment_link: str
163
+
164
+
165
+ class InvoiceTONMessageModel(InvoiceBaseModel):
166
+ approved_addresses: list[str] = []
167
+ ton_amount: float
168
+
169
+
170
+ class PaidContentMessage(BaseModel):
171
+ message: str
@@ -17,3 +17,4 @@ class ExtraOptionCategoriesResponseModel(MetaBaseModel):
17
17
  choice_count: int = 0 # How many options user can select from this category, 0 means no limit
18
18
  is_required: bool | None = False # If true, user must select at least one option from this category
19
19
  options: list[ExtraOptionResponseModel] = []
20
+ metadata = {}
@@ -22,6 +22,7 @@ class ProductResponseModel(BaseProductResponseModel):
22
22
  related_products: list["ProductResponseModel"] | None = []
23
23
  secret_urls: list[str] = []
24
24
  checkout_modes: list[ProductCheckoutModes] = []
25
+ metadata = {}
25
26
 
26
27
  @field_validator("checkout_modes")
27
28
  def convert_status(cls, value: list[ProductCheckoutModes]):
@@ -1,37 +0,0 @@
1
- from datetime import datetime
2
- from typing import Optional
3
-
4
- from pydantic import BaseModel, Field
5
-
6
-
7
-
8
-
9
- class ShopDetailsModel(BaseModel):
10
- shop_id: str
11
- shop_name: str
12
- friendly_name: str
13
- shop_language: str = "RU"
14
- shop_api_url: str = "https://marketplace-api-dev.tg-shops.com"
15
- contact_phone: str | None = None
16
- contact_email: str
17
- orders_chat_id: int
18
- orders_history_chat_id: Optional[int] = None
19
- search_enabled: Optional[bool] = False
20
- warehouse_accounting: bool = False
21
- bot_url: str | None = None
22
- bot_token: str
23
- payment_token: str | None = None
24
- placeholder: str
25
- order_process: str
26
- nocodb_project_id: str
27
- nocodb_categories_table: str
28
- nocodb_products_table: str
29
- nocodb_orders_table: str
30
- nocodb_status_table: str
31
- nocodb_bot_commands_table: str
32
- nocodb_options_table: Optional[str] = None
33
- nocodb_options_category_table: Optional[str] = None
34
- topic_chat_id: Optional[int] = None
35
- premium_expiration_date: Optional[datetime] = None
36
- web_app_url: str = ""
37
-
@@ -1,150 +0,0 @@
1
- from datetime import datetime
2
- from typing import Optional, List, Dict, Any, Union
3
- from pydantic import Field, field_validator, BaseModel
4
-
5
- from shop_system_models.shop_api import MetaBaseModel
6
- from shop_system_models.shop_api.shop.response.baskets import UserBasketResponseModelV2
7
- from shop_system_models.shop_api.shop.response.products import ProductResponseModel
8
-
9
-
10
- class ExtraFieldPayload(MetaBaseModel):
11
- """Model for extra field data in orders."""
12
- name: str
13
- value: str
14
-
15
-
16
- class OrderDeliveryTypeModel(BaseModel):
17
- """Model for order delivery details."""
18
- name: str
19
- address: Optional[str] = ""
20
- amount: Optional[float] = 0.0
21
- extra_fields_payload: Optional[List[ExtraFieldPayload]] = Field(default_factory=lambda: [])
22
-
23
-
24
- class Coordinates(MetaBaseModel):
25
- """Geographic coordinates."""
26
- latitude: Optional[float] = None
27
- longitude: Optional[float] = None
28
-
29
-
30
- class AddressModel(MetaBaseModel):
31
- """Address model with optional coordinates."""
32
- coordinates: Optional[Coordinates] = None
33
- address: Optional[str] = None
34
-
35
-
36
- class ExtraField(MetaBaseModel):
37
- """Model for defining extra fields."""
38
- name: str
39
- description: str
40
- is_required: Optional[bool] = None
41
-
42
-
43
- class DeliveryTypeModel(MetaBaseModel):
44
- """Delivery type configuration model."""
45
- name: str
46
- amount: float = 0.0
47
- is_address_required: Optional[bool] = False
48
- address_hint: Optional[str] = ""
49
- extra_fields: List[ExtraField] = Field(default_factory=list)
50
- is_timepicker_required: bool = False
51
- details: Optional[str] = None
52
- country: Optional[str] = None
53
- country_code: Optional[str] = None # ISO format, ex.: RU, KZ, BY...
54
- city: Optional[str] = None
55
- delivery_location: Optional[Coordinates] = None
56
- delivery_radius: Optional[int] = None
57
- delivery_min_hour: Optional[int] = None
58
- delivery_max_hour: Optional[int] = None
59
- delivery_minutes_interval: Optional[int] = None
60
- delivery_min_day: Optional[int] = None
61
- delivery_max_day: Optional[int] = None
62
-
63
-
64
- class BookingOrderModel(MetaBaseModel):
65
- """Details for a booking order."""
66
- booking_id: str
67
- from_date: datetime
68
- till_date: datetime
69
- item_id: str
70
-
71
-
72
- class CreateOrderModel(MetaBaseModel):
73
- """Model for creating a new order."""
74
- delivery: Optional[OrderDeliveryTypeModel] = None
75
- delivery_date_from: datetime = Field(default_factory=datetime.now)
76
- comment: Optional[str] = None
77
- user_contact_number: Optional[str] = None
78
- payment_type_id: Optional[str] = None
79
- booking_details: Optional[BookingOrderModel] = None
80
- preview_url: Optional[str] = ""
81
-
82
-
83
- class ProductsInBasket(ProductResponseModel):
84
- count_in_basket: int = 1
85
-
86
- class OrderPaymentDetails(BaseModel):
87
- title: str
88
- description: str
89
- expires_at: datetime
90
- link: str
91
-
92
-
93
- # This depends on UserBasketResponseModelV2 which we'll define in a separate file
94
- # For now, we'll create a placeholder class that can be updated later
95
- class OrderModel(CreateOrderModel):
96
- """Complete order model."""
97
- basket: UserBasketResponseModelV2 # This will be implemented in basket models
98
- user_id: Optional[str] = None
99
- basket_id: Optional[str] = None
100
- status: Optional[str] = None
101
- client_coordinates: Optional[AddressModel] = None
102
- created: datetime = Field(default_factory=datetime.now)
103
- updated: datetime = Field(default_factory=datetime.now)
104
- order_number: str = "#0001"
105
- process_key: Optional[int] = None
106
- coupon: Optional[str] = None
107
- admin_message_id: str | None = None
108
- payment_data: OrderPaymentDetails | None = None
109
-
110
-
111
- class LabeledPrice(BaseModel):
112
- label: str
113
- amount: int
114
-
115
-
116
- class InvoiceBaseModel(BaseModel):
117
- chat_id: int
118
- order_id: str
119
- order_number: str # order_number
120
- payload: str # <basket_id>_<order_id>_<order_number> from OrderResponseModel --> its subscription key
121
- amount: float
122
- currency: str # fiat
123
- payment_address: str
124
- payment_timeout: int | None = None
125
-
126
-
127
- class InvoiceTGMessageModel(InvoiceBaseModel):
128
- description: str # order_products
129
- provider_data: str | None = None
130
- prices: list[LabeledPrice] # label and amount in coins!
131
- need_name: bool | None = False
132
- need_phone_number: bool | None = False
133
- need_email: bool | None = False
134
- send_phone_number_to_provider: bool | None = False
135
- send_email_to_provider: bool | None = False
136
- is_flexible: bool | None = False
137
- reply_markup: bool | None = None
138
-
139
-
140
- class InvoiceWithPaymentLinkMessageModel(InvoiceBaseModel):
141
- payment_link: str
142
-
143
-
144
- class InvoiceTONMessageModel(InvoiceBaseModel):
145
- approved_addresses: list[str] = []
146
- ton_amount: float
147
-
148
-
149
- class PaidContentMessage(BaseModel):
150
- message: str