Добавлены новые функции для работы с промокодами в integration_api.py, включая создание и получение промокодов для Telegram-агентов. Обновлены модели и добавлен новый файл generate_sql.py для генерации SQL-скрипта создания таблиц. Обновлены fill_db.py для генерации промокодов при заполнении базы данных. Также обновлены sql_models.py для добавления модели PromoCode и соответствующих связей. Улучшена структура кода и добавлены отладочные сообщения.

This commit is contained in:
Redsandyg
2025-06-15 15:20:28 +03:00
parent 3973d6404d
commit 92df59ad23
7 changed files with 318 additions and 6 deletions

View File

@@ -1,11 +1,12 @@
import random
from uuid import uuid4
from sqlmodel import Session
from sql_models import TgAgent, Ref, Sale, Account, Company, AgentTransaction, PartnerTransaction, CompanyBalance, AgentBalance, IntegrationToken
from sql_models import TgAgent, Ref, Sale, Account, Company, AgentTransaction, PartnerTransaction, CompanyBalance, AgentBalance, IntegrationToken, PromoCode
from sqlalchemy import text
from datetime import datetime, timedelta
from hashlib import sha256
from helpers_bff import AUTH_DB_ENGINE, get_password_hash
import string
# Константа: список user_ids
@@ -71,6 +72,7 @@ def fill_db():
date_list = get_date_list(7) # 8 дней: от недели назад до сегодня
with Session(AUTH_DB_ENGINE) as session:
# Очистка таблиц
session.execute(text("DELETE FROM promocode"))
session.execute(text("DELETE FROM sale"))
session.execute(text("DELETE FROM ref"))
session.execute(text("DELETE FROM tgagent"))
@@ -149,6 +151,35 @@ def fill_db():
session.commit()
for tg_agent in tg_agents:
session.refresh(tg_agent)
# Отладка: количество агентов
agent_count = session.execute(text("SELECT COUNT(*) FROM tgagent")).scalar()
print(f'Агентов в базе: {agent_count}')
# Генерация промокодов для каждого агента с try/except
alphabet = string.ascii_letters + string.digits + "!@#$%^&*"
try:
for tg_agent in tg_agents:
promocode_count = random.randint(2, 4)
for _ in range(promocode_count):
promocode = ''.join(random.choices(alphabet, k=8))
# Проверяем уникальность
while session.execute(text("SELECT 1 FROM promocode WHERE promocode = :code"), {"code": promocode}).first():
promocode = ''.join(random.choices(alphabet, k=8))
promo = PromoCode(
promocode=promocode,
perc=10.0,
agent_id=tg_agent.id,
description=random.choice(DESCRIPTIONS),
create_dttm=datetime.utcnow(),
update_dttm=datetime.utcnow()
)
session.add(promo)
session.commit()
except Exception as e:
print(f'Ошибка при добавлении промокодов: {e}')
session.rollback()
# Отладка: количество промокодов
count = session.execute(text("SELECT COUNT(*) FROM promocode")).scalar()
print(f'Промокодов в базе: {count}')
# 3. Refs (минимум 22 на агента)
refs = []
desc_count = len(ALL_DESCRIPTIONS)