Обновлены модели и функции для поддержки групповых продаж. Внесены изменения в API для передачи идентификаторов групповых продаж. Обновлены SQL-скрипты и модели для учета нового поля group_sale_id. Изменены данные для создания продажи, включая категорию и стоимость.

This commit is contained in:
Redsandyg 2025-06-18 11:31:32 +03:00
parent bf6a6a8987
commit 9157570e58
6 changed files with 15 additions and 6 deletions

View File

@ -4,16 +4,17 @@ import json
# Конфигурация API # Конфигурация API
BASE_URL = "http://127.0.0.1:8001" BASE_URL = "http://127.0.0.1:8001"
API_KEY = "672a1437-70e8-461f-9bff-20f5ce4a023d" API_KEY = "de058226-37d3-4d0e-a483-3c2a7fac3573"
REF = "9bd1a6bd-98e1-48f4-a120-3b3d016011c0" REF = "0d9aaa96-80e6-424c-84c9-ff70a6eb915e"
# Данные для запроса на создание продажи # Данные для запроса на создание продажи
# Замените эти значения на актуальные для вашей продажи # Замените эти значения на актуальные для вашей продажи
sale_data = { sale_data = {
"cost": 100.50, # Стоимость продажи "cost": 100, # Стоимость продажи
"ref": REF, # Ваш реферальный код "ref": REF, # Ваш реферальный код
"sale_id": str(uuid.uuid4()), # Уникальный идентификатор продажи для вашей компании "sale_id": str(uuid.uuid4()), # Уникальный идентификатор продажи для вашей компании
"category": 1 # id категории (например, 1 - basic) "category": "vip", # название категории (например, 'basic', 'premium', 'vip')
"group_sale_id": str(uuid.uuid4()) # уникальный идентификатор группы продаж
} }
# Эндпоинты # Эндпоинты

View File

@ -198,7 +198,9 @@ def fill_db():
all_categories = session.query(SaleCategory).filter_by(company_id=company.id).all() all_categories = session.query(SaleCategory).filter_by(company_id=company.id).all()
for ref in refs: for ref in refs:
sale_count = random.randint(20, int(20 * 1.25)) # от 20 до 25 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) cost = round(random.uniform(100, 1000), 2)
sale_category = random.choice(all_categories) sale_category = random.choice(all_categories)
crediting = round(cost * (sale_category.perc / 100.0), 2) crediting = round(cost * (sale_category.perc / 100.0), 2)
@ -208,11 +210,13 @@ def fill_db():
time_diff = end_dttm - start_dttm time_diff = end_dttm - start_dttm
random_seconds = random.uniform(0, time_diff.total_seconds()) random_seconds = random.uniform(0, time_diff.total_seconds())
sale_dttm = start_dttm + timedelta(seconds=random_seconds) sale_dttm = start_dttm + timedelta(seconds=random_seconds)
group_sale_id = group_sale_ids[idx // group_size]
sale = Sale( sale = Sale(
cost=cost, cost=cost,
crediting=crediting, crediting=crediting,
ref=ref.id, ref=ref.id,
sale_id=str(uuid4()), sale_id=str(uuid4()),
group_sale_id=group_sale_id,
company_id=company.id, company_id=company.id,
category=sale_category.id, category=sale_category.id,
sale_dttm=sale_dttm, sale_dttm=sale_dttm,

View File

@ -257,6 +257,7 @@ async def create_sale(
crediting=crediting_amount, crediting=crediting_amount,
ref=referral.id, ref=referral.id,
sale_id=req.sale_id, sale_id=req.sale_id,
group_sale_id=req.group_sale_id,
company_id=company.id, company_id=company.id,
category=sale_category.id, category=sale_category.id,
sale_dttm=datetime.utcnow() sale_dttm=datetime.utcnow()

View File

@ -20,7 +20,8 @@ class SaleCreateRequest(BaseModel):
promocode: Optional[str] = None promocode: Optional[str] = None
sale_id: str sale_id: str
cost: float cost: float
category: int # id категории продажи category: str # название категории продажи
group_sale_id: str # новое поле для группировки продаж
class SaleCreateResponse(BaseModel): class SaleCreateResponse(BaseModel):
msg: str msg: str

View File

@ -164,6 +164,7 @@ CREATE TABLE sale (
crediting FLOAT NOT NULL, crediting FLOAT NOT NULL,
ref INTEGER NOT NULL, ref INTEGER NOT NULL,
sale_id VARCHAR NOT NULL, sale_id VARCHAR NOT NULL,
group_sale_id VARCHAR NOT NULL,
company_id INTEGER NOT NULL, company_id INTEGER NOT NULL,
category INTEGER NOT NULL, category INTEGER NOT NULL,
sale_dttm DATETIME NOT NULL, sale_dttm DATETIME NOT NULL,

View File

@ -69,6 +69,7 @@ class Sale(SQLModel, table=True):
crediting: float # сколько начислено за продажу crediting: float # сколько начислено за продажу
ref: int = Field(foreign_key="ref.id") ref: int = Field(foreign_key="ref.id")
sale_id: str sale_id: str
group_sale_id: str # новое поле для группировки продаж
company_id: int = Field(foreign_key="company.id") company_id: int = Field(foreign_key="company.id")
category: int = Field(foreign_key="salecategory.id") # новая ссылка на категорию category: int = Field(foreign_key="salecategory.id") # новая ссылка на категорию
sale_dttm: datetime = Field(default_factory=datetime.utcnow) sale_dttm: datetime = Field(default_factory=datetime.utcnow)