Добавлены новые функции для работы с промокодами в 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,14 +1,16 @@
from fastapi import FastAPI, Depends, HTTPException, status, Header, Body
from fastapi import FastAPI, Depends, HTTPException, status, Header, Body, Request
from sqlmodel import Session, select, Field
from typing import Optional, List, Dict
from datetime import datetime, timedelta
import hashlib
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, PromoCode
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
from tg_models import RefAddRequest, RefResponse, RefAddResponse, RefStatResponse, RegisterRequest, StatResponse, PromoCodeAddRequest, PromoCodeResponse
from helpers_bff import AUTH_DB_ENGINE, get_integration_db, create_integration_jwt_token, get_current_company_from_jwt, get_tg_agent_by_tg_id, get_current_tg_agent
app = FastAPI()
@@ -304,3 +306,32 @@ def register(req: RegisterRequest, db: Session = Depends(get_integration_db)):
db.commit()
db.refresh(new_tg_agent)
return {"msg": "TgAgent registered successfully"}
@app.post("/promocode/add", tags=["agent-tg"], response_model=PromoCodeResponse)
def add_promocode(req: PromoCodeAddRequest, current_tg_agent: TgAgent = Depends(get_current_tg_agent), db: Session = Depends(get_integration_db)):
"""
Создает новый промокод для текущего Telegram-агента.
"""
description = req.description
alphabet = string.ascii_letters + string.digits + "!@#$%^&*"
promocode = ''.join(choices(alphabet, k=8))
while db.exec(select(PromoCode).where(PromoCode.promocode == promocode)).first():
promocode = ''.join(choices(alphabet, k=8))
new_code = PromoCode(
promocode=promocode,
perc=10.0,
agent_id=current_tg_agent.id,
description=description
)
db.add(new_code)
db.commit()
db.refresh(new_code)
return PromoCodeResponse(promocode=new_code.promocode, perc=new_code.perc, description=new_code.description)
@app.get("/promocode", tags=["agent-tg"], response_model=List[PromoCodeResponse])
def get_promocodes(current_tg_agent: TgAgent = Depends(get_current_tg_agent), db: Session = Depends(get_integration_db)):
"""
Получает все промокоды текущего Telegram-агента.
"""
codes = db.exec(select(PromoCode).where(PromoCode.agent_id == current_tg_agent.id)).all()
return [PromoCodeResponse(promocode=c.promocode, perc=c.perc, description=c.description) for c in codes]