Добавлены новые модели SaleCategoryRequest и SaleCategoryResponse в bff_models.py для работы с категориями продаж. Обновлены функции в fill_db.py для заполнения базы данных категориями продаж. Изменены эндпоинты в main.py для создания и получения категорий продаж. Обновлены модели и SQL-скрипты для поддержки новых полей и связей. Улучшена логика обработки продаж с учетом категорий.

This commit is contained in:
Redsandyg
2025-06-18 10:48:29 +03:00
parent 4f366680bf
commit bf6a6a8987
8 changed files with 143 additions and 11 deletions

65
main.py
View File

@@ -38,7 +38,9 @@ from bff_models import (
TransactionStatus,
IntegrationTokenResponse,
IntegrationTokenCreateRequest,
IntegrationTokenUpdateRequest
IntegrationTokenUpdateRequest,
SaleCategoryRequest,
SaleCategoryResponse
)
from sql_models import (
Company,
@@ -49,7 +51,8 @@ from sql_models import (
PartnerTransaction,
AgentBalance,
Account,
IntegrationToken
IntegrationToken,
SaleCategory
)
from sqlalchemy import func
import hashlib
@@ -64,6 +67,7 @@ from helpers_bff import (
pwd_context,
)
import os
from pydantic import BaseModel
# Создание движка базы данных
@@ -726,3 +730,60 @@ def delete_integration_token(
db.delete(token)
db.commit()
return {"msg": "Токен удален успешно"}
# --- Категории продаж ---
@app.get("/account/category", tags=["bff", "account"], response_model=List[SaleCategoryResponse])
def get_sale_categories(
current_account: Account = Depends(get_current_account),
db: Session = Depends(get_db)
):
"""
Возвращает список всех категорий продаж компании пользователя.
"""
categories = db.exec(select(SaleCategory).where(SaleCategory.company_id == current_account.company_id)).all()
return categories
@app.post("/account/category", tags=["bff", "account"], response_model=SaleCategoryResponse)
def create_or_update_sale_category(
req: SaleCategoryRequest,
current_account: Account = Depends(get_current_account),
db: Session = Depends(get_db)
):
"""
Создает новую или обновляет существующую категорию продаж для компании пользователя.
"""
# Проверка уникальности category для компании
existing = db.exec(
select(SaleCategory)
.where(SaleCategory.category == req.category)
.where(SaleCategory.company_id == current_account.company_id)
).first()
if req.id is not None:
category = db.exec(select(SaleCategory).where(SaleCategory.id == req.id, SaleCategory.company_id == current_account.company_id)).first()
if not category:
raise HTTPException(status_code=404, detail="Категория не найдена")
# Если меняем имя, оно не должно совпадать с другой категорией
if existing and existing.id != req.id:
raise HTTPException(status_code=400, detail="Категория с таким именем уже существует")
category.category = req.category
category.description = req.description
category.perc = req.perc
category.update_dttm = datetime.utcnow()
db.add(category)
else:
if existing:
raise HTTPException(status_code=400, detail="Категория с таким именем уже существует")
now = datetime.utcnow()
category = SaleCategory(
category=req.category,
description=req.description,
perc=req.perc,
company_id=current_account.company_id,
create_dttm=now,
update_dttm=now
)
db.add(category)
db.commit()
db.refresh(category)
return SaleCategoryResponse.model_validate(category)