Добавлены новые модели SaleCategoryRequest и SaleCategoryResponse в bff_models.py для работы с категориями продаж. Обновлены функции в fill_db.py для заполнения базы данных категориями продаж. Изменены эндпоинты в main.py для создания и получения категорий продаж. Обновлены модели и SQL-скрипты для поддержки новых полей и связей. Улучшена логика обработки продаж с учетом категорий.
This commit is contained in:
@@ -7,7 +7,7 @@ import uuid
|
||||
from random import choices
|
||||
import string
|
||||
|
||||
from sql_models import Company, IntegrationToken, Ref, Sale, AgentTransaction, PartnerTransaction, AgentBalance, TgAgent, CompanyBalance
|
||||
from sql_models import Company, IntegrationToken, Ref, Sale, AgentTransaction, PartnerTransaction, AgentBalance, TgAgent, CompanyBalance, SaleCategory
|
||||
from integration_models import Token, SaleCreateRequest, SaleCreateResponse, TransactionStatus, WithdrawRequest, WithdrawResponse
|
||||
from bff_models import RegisterResponse, TgAuthResponse
|
||||
from tg_models import RefAddRequest, RefResponse, RefAddResponse, RefStatResponse, RegisterRequest, StatResponse
|
||||
@@ -201,6 +201,8 @@ async def create_sale(
|
||||
# Проверка входных данных
|
||||
if not req.ref and not req.promocode:
|
||||
raise HTTPException(status_code=400, detail="Необходимо передать либо ref, либо promocode")
|
||||
if not req.category:
|
||||
raise HTTPException(status_code=400, detail="Необходимо передать category (id категории)")
|
||||
|
||||
# 1. Найти Ref по ref и/или promocode
|
||||
referral = None
|
||||
@@ -235,8 +237,11 @@ async def create_sale(
|
||||
if existing_sale:
|
||||
raise HTTPException(status_code=400, detail="Продажа с таким sale_id уже существует для данной компании")
|
||||
|
||||
# 3. Рассчитать crediting
|
||||
crediting_amount = req.cost * (company.agent_commission / 100.0)
|
||||
# 3. Найти категорию и рассчитать crediting
|
||||
sale_category = db.exec(select(SaleCategory).where(SaleCategory.category == req.category, SaleCategory.company_id == company.id)).first()
|
||||
if not sale_category:
|
||||
raise HTTPException(status_code=404, detail="Категория продажи не найдена")
|
||||
crediting_amount = req.cost * (sale_category.perc / 100.0)
|
||||
|
||||
# 4. Проверить и обновить AgentBalance и CompanyBalance
|
||||
agent_balance = db.exec(select(AgentBalance).where(AgentBalance.tg_agent_id == tg_agent.id)).first()
|
||||
@@ -253,6 +258,7 @@ async def create_sale(
|
||||
ref=referral.id,
|
||||
sale_id=req.sale_id,
|
||||
company_id=company.id,
|
||||
category=sale_category.id,
|
||||
sale_dttm=datetime.utcnow()
|
||||
)
|
||||
db.add(new_sale)
|
||||
|
||||
Reference in New Issue
Block a user