Добавлены новые модели SaleCategoryRequest и SaleCategoryResponse в bff_models.py для работы с категориями продаж. Обновлены функции в fill_db.py для заполнения базы данных категориями продаж. Изменены эндпоинты в main.py для создания и получения категорий продаж. Обновлены модели и SQL-скрипты для поддержки новых полей и связей. Улучшена логика обработки продаж с учетом категорий.
This commit is contained in:
65
main.py
65
main.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user