From 9157570e58fb41299b9d5e6f501c097e34204287 Mon Sep 17 00:00:00 2001 From: Redsandyg Date: Wed, 18 Jun 2025 11:31:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=BE=D0=B2=D1=8B=D1=85=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B4=D0=B0=D0=B6.=20=D0=92=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=20API=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B8=20=D0=B8=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=BE=D0=B2=D1=8B=D1=85?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6.=20=D0=9E=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20SQL-=D1=81=D0=BA=D1=80?= =?UTF-8?q?=D0=B8=D0=BF=D1=82=D1=8B=20=D0=B8=20=D0=BC=D0=BE=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=83=D1=87=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8F=20group=5Fsale=5Fid.=20=D0=98=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D1=8B=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6=D0=B8,=20?= =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D1=8F=20=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=D1=80=D0=B8=D1=8E=20=D0=B8=20=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D1=8C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- call_sale_api.py | 9 +++++---- fill_db.py | 6 +++++- integration_api.py | 1 + integration_models.py | 3 ++- sql_create.sql | 1 + sql_models.py | 1 + 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/call_sale_api.py b/call_sale_api.py index c19c74d..18bd560 100644 --- a/call_sale_api.py +++ b/call_sale_api.py @@ -4,16 +4,17 @@ import json # Конфигурация API BASE_URL = "http://127.0.0.1:8001" -API_KEY = "672a1437-70e8-461f-9bff-20f5ce4a023d" -REF = "9bd1a6bd-98e1-48f4-a120-3b3d016011c0" +API_KEY = "de058226-37d3-4d0e-a483-3c2a7fac3573" +REF = "0d9aaa96-80e6-424c-84c9-ff70a6eb915e" # Данные для запроса на создание продажи # Замените эти значения на актуальные для вашей продажи sale_data = { - "cost": 100.50, # Стоимость продажи + "cost": 100, # Стоимость продажи "ref": REF, # Ваш реферальный код "sale_id": str(uuid.uuid4()), # Уникальный идентификатор продажи для вашей компании - "category": 1 # id категории (например, 1 - basic) + "category": "vip", # название категории (например, 'basic', 'premium', 'vip') + "group_sale_id": str(uuid.uuid4()) # уникальный идентификатор группы продаж } # Эндпоинты diff --git a/fill_db.py b/fill_db.py index 755019f..6c442b8 100644 --- a/fill_db.py +++ b/fill_db.py @@ -198,7 +198,9 @@ def fill_db(): all_categories = session.query(SaleCategory).filter_by(company_id=company.id).all() for ref in refs: sale_count = random.randint(20, int(20 * 1.25)) # от 20 до 25 - for _ in range(sale_count): + group_size = 5 + group_sale_ids = [str(uuid4()) for _ in range((sale_count // group_size) + 1)] + for idx in range(sale_count): cost = round(random.uniform(100, 1000), 2) sale_category = random.choice(all_categories) crediting = round(cost * (sale_category.perc / 100.0), 2) @@ -208,11 +210,13 @@ def fill_db(): time_diff = end_dttm - start_dttm random_seconds = random.uniform(0, time_diff.total_seconds()) sale_dttm = start_dttm + timedelta(seconds=random_seconds) + group_sale_id = group_sale_ids[idx // group_size] sale = Sale( cost=cost, crediting=crediting, ref=ref.id, sale_id=str(uuid4()), + group_sale_id=group_sale_id, company_id=company.id, category=sale_category.id, sale_dttm=sale_dttm, diff --git a/integration_api.py b/integration_api.py index 17d49db..1d2b41f 100644 --- a/integration_api.py +++ b/integration_api.py @@ -257,6 +257,7 @@ async def create_sale( crediting=crediting_amount, ref=referral.id, sale_id=req.sale_id, + group_sale_id=req.group_sale_id, company_id=company.id, category=sale_category.id, sale_dttm=datetime.utcnow() diff --git a/integration_models.py b/integration_models.py index bb39284..77e6194 100644 --- a/integration_models.py +++ b/integration_models.py @@ -20,7 +20,8 @@ class SaleCreateRequest(BaseModel): promocode: Optional[str] = None sale_id: str cost: float - category: int # id категории продажи + category: str # название категории продажи + group_sale_id: str # новое поле для группировки продаж class SaleCreateResponse(BaseModel): msg: str diff --git a/sql_create.sql b/sql_create.sql index 24e80b0..08ac627 100644 --- a/sql_create.sql +++ b/sql_create.sql @@ -164,6 +164,7 @@ CREATE TABLE sale ( crediting FLOAT NOT NULL, ref INTEGER NOT NULL, sale_id VARCHAR NOT NULL, + group_sale_id VARCHAR NOT NULL, company_id INTEGER NOT NULL, category INTEGER NOT NULL, sale_dttm DATETIME NOT NULL, diff --git a/sql_models.py b/sql_models.py index d528bc5..2845f17 100644 --- a/sql_models.py +++ b/sql_models.py @@ -69,6 +69,7 @@ class Sale(SQLModel, table=True): crediting: float # сколько начислено за продажу ref: int = Field(foreign_key="ref.id") sale_id: str + group_sale_id: str # новое поле для группировки продаж company_id: int = Field(foreign_key="company.id") category: int = Field(foreign_key="salecategory.id") # новая ссылка на категорию sale_dttm: datetime = Field(default_factory=datetime.utcnow)