Добавлены новые функции для работы с промокодами в integration_api.py, включая создание и получение промокодов для Telegram-агентов. Обновлены модели и добавлен новый файл generate_sql.py для генерации SQL-скрипта создания таблиц. Обновлены fill_db.py для генерации промокодов при заполнении базы данных. Также обновлены sql_models.py для добавления модели PromoCode и соответствующих связей. Улучшена структура кода и добавлены отладочные сообщения.
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user