Добавлено новое поле promocode в модель StatReferralsItem и модель Ref. Обновлены функции в fill_db.py для генерации уникальных промокодов при создании реферальных ссылок. Обновлены эндпоинты в integration_api.py для возврата промокодов вместе с реферальными ссылками. Удалены устаревшие функции работы с промокодами из кода. Обновлены SQL-скрипты и модели для учета новых полей.
This commit is contained in:
36
fill_db.py
36
fill_db.py
@@ -1,7 +1,7 @@
|
||||
import random
|
||||
from uuid import uuid4
|
||||
from sqlmodel import Session
|
||||
from sql_models import TgAgent, Ref, Sale, Account, Company, AgentTransaction, PartnerTransaction, CompanyBalance, AgentBalance, IntegrationToken, PromoCode
|
||||
from sql_models import TgAgent, Ref, Sale, Account, Company, AgentTransaction, PartnerTransaction, CompanyBalance, AgentBalance, IntegrationToken
|
||||
from sqlalchemy import text
|
||||
from datetime import datetime, timedelta
|
||||
from hashlib import sha256
|
||||
@@ -72,7 +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 promocode"))
|
||||
session.execute(text("DELETE FROM sale"))
|
||||
session.execute(text("DELETE FROM ref"))
|
||||
session.execute(text("DELETE FROM tgagent"))
|
||||
@@ -154,45 +154,25 @@ def fill_db():
|
||||
# Отладка: количество агентов
|
||||
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)
|
||||
alphabet = string.ascii_letters + string.digits + "!@#$%^&*"
|
||||
for tg_agent in tg_agents:
|
||||
ref_count = random.randint(22, int(22 * 1.25)) # от 22 до 27
|
||||
for j in range(ref_count):
|
||||
ref_val = str(uuid4())
|
||||
desc_val = ALL_DESCRIPTIONS[(j % desc_count)]
|
||||
dt = random.choice(date_list)
|
||||
promocode = ''.join(random.choices(alphabet, k=8))
|
||||
# Проверяем уникальность промокода среди уже созданных рефов
|
||||
while any(r.promocode == promocode for r in refs):
|
||||
promocode = ''.join(random.choices(alphabet, k=8))
|
||||
ref = Ref(
|
||||
tg_agent_id=tg_agent.id,
|
||||
ref=ref_val,
|
||||
description=desc_val,
|
||||
promocode=promocode,
|
||||
create_dttm=dt,
|
||||
update_dttm=dt
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user