Добавлены новые статусы для агентских и партнерских транзакций, а также реализованы функции для автоматического подтверждения транзакций. Обновлены модели и API для управления настройками автоподтверждения и утверждения транзакций. Улучшены комментарии для ясности кода.
This commit is contained in:
parent
8c6fadb180
commit
8a8b111f40
@ -204,9 +204,9 @@ def fill_db():
|
||||
session.refresh(balance)
|
||||
|
||||
# 5.3 AgentTransactions and PartnerTransactions
|
||||
AGENT_TRANSACTION_STATUSES = ['waiting', 'process', 'done', 'reject', 'error']
|
||||
AGENT_TRANSACTION_STATUSES = ['waiting', 'process', 'done', 'reject', 'error', 'new']
|
||||
PARTNER_TRANSACTION_TYPES = ['deposit', 'agent_payout', 'service_fee']
|
||||
PARTNER_TRANSACTION_STATUSES = ['process', 'done', 'error']
|
||||
PARTNER_TRANSACTION_STATUSES = ['process', 'done', 'error', 'new']
|
||||
|
||||
for tg_agent in tg_agents:
|
||||
# Генерируем несколько групп транзакций для каждого агента
|
||||
|
||||
107
main.py
107
main.py
@ -26,6 +26,7 @@ class Company(SQLModel, table=True):
|
||||
key: str = Field(index=True, unique=True)
|
||||
create_dttm: datetime = Field(default_factory=datetime.utcnow)
|
||||
update_dttm: datetime = Field(default_factory=datetime.utcnow)
|
||||
auto_approve_transactions: bool = Field(default=False) # Новое поле для автоподтверждения
|
||||
|
||||
class TgAgent(SQLModel, table=True):
|
||||
id: Optional[int] = Field(default=None, primary_key=True)
|
||||
@ -124,6 +125,7 @@ class TransactionStatus(str, Enum): # Определяем Enum для стат
|
||||
DONE = 'done'
|
||||
REJECT = 'reject'
|
||||
ERROR = 'error'
|
||||
NEW = 'new' # Новый статус
|
||||
|
||||
|
||||
# Новая модель ответа для агентских транзакций с именем агента
|
||||
@ -719,3 +721,108 @@ def get_account_agent_transactions(
|
||||
)
|
||||
|
||||
return agent_transactions_response
|
||||
|
||||
# Модель запроса для POST /account/auto-approve
|
||||
class AutoApproveSettingsRequest(BaseModel):
|
||||
auto_approve: bool
|
||||
apply_to_current: Optional[bool] = False
|
||||
|
||||
@app.get("/account/auto-approve", tags=["bff"])
|
||||
def get_auto_approve_settings(
|
||||
current_account: Account = Depends(get_current_account),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
"""
|
||||
Возвращает текущую настройку автоматического подтверждения для компании пользователя.
|
||||
"""
|
||||
company = db.exec(select(Company).where(Company.id == current_account.company_id)).first()
|
||||
if not company:
|
||||
raise HTTPException(status_code=404, detail="Компания не найдена")
|
||||
return {"auto_approve_transactions": company.auto_approve_transactions}
|
||||
|
||||
@app.post("/account/auto-approve", tags=["bff"])
|
||||
def update_auto_approve_settings(
|
||||
req: AutoApproveSettingsRequest,
|
||||
current_account: Account = Depends(get_current_account),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
"""
|
||||
Обновляет настройку автоматического подтверждения для компании пользователя.
|
||||
При необходимости переводит транзакции из 'waiting' в 'new'.
|
||||
"""
|
||||
company = db.exec(select(Company).where(Company.id == current_account.company_id)).first()
|
||||
if not company:
|
||||
raise HTTPException(status_code=404, detail="Компания не найдена")
|
||||
|
||||
company.auto_approve_transactions = req.auto_approve
|
||||
company.update_dttm = datetime.utcnow()
|
||||
db.add(company)
|
||||
|
||||
if req.apply_to_current and req.auto_approve: # Применяем только если авто-аппрув включается и запрошено применение к текущим
|
||||
# Находим все агентские транзакции компании в статусе 'waiting'
|
||||
agent_transactions_to_update = db.exec(
|
||||
select(AgentTransaction)
|
||||
.join(TgAgent)
|
||||
.where(TgAgent.company_id == company.id)
|
||||
.where(AgentTransaction.status == TransactionStatus.WAITING)
|
||||
).all()
|
||||
|
||||
for agent_trans in agent_transactions_to_update:
|
||||
agent_trans.status = TransactionStatus.NEW
|
||||
agent_trans.update_dttm = datetime.utcnow()
|
||||
db.add(agent_trans)
|
||||
|
||||
# Находим соответствующие партнерские транзакции и обновляем их статус
|
||||
partner_transactions_to_update = db.exec(
|
||||
select(PartnerTransaction)
|
||||
.where(PartnerTransaction.agent_transaction_id == agent_trans.id) # Используем связь по ID
|
||||
.where(PartnerTransaction.status == TransactionStatus.PROCESS) # Предполагаем, что связанные партнерские транзакции в статусе PROCESS
|
||||
).all()
|
||||
for partner_trans in partner_transactions_to_update:
|
||||
partner_trans.status = TransactionStatus.NEW
|
||||
partner_trans.update_dttm = datetime.utcnow()
|
||||
db.add(partner_trans)
|
||||
|
||||
db.commit()
|
||||
db.refresh(company)
|
||||
|
||||
return {"msg": "Настройка автоматического подтверждения обновлена", "auto_approve_transactions": company.auto_approve_transactions}
|
||||
|
||||
# Модель запроса для POST /account/approve-transactions
|
||||
class ApproveTransactionsRequest(BaseModel):
|
||||
transaction_ids: List[uuid.UUID]
|
||||
|
||||
@app.post("/account/approve-transactions", tags=["bff"])
|
||||
def approve_agent_transactions(
|
||||
req: ApproveTransactionsRequest,
|
||||
current_account: Account = Depends(get_current_account),
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
"""
|
||||
Утверждение выбранных агентских транзакций для компании текущего пользователя.
|
||||
Переводит транзакции из статуса 'waiting' в 'new'.
|
||||
"""
|
||||
company_id = current_account.company_id
|
||||
approved_count = 0
|
||||
|
||||
if not req.transaction_ids:
|
||||
return {"msg": "Нет транзакций для утверждения", "approved_count": 0}
|
||||
|
||||
# Find transactions belonging to the company and with specified IDs and statuses
|
||||
transactions_to_approve = db.exec(
|
||||
select(AgentTransaction)
|
||||
.join(TgAgent)
|
||||
.where(TgAgent.company_id == company_id)
|
||||
.where(AgentTransaction.transaction_group.in_(req.transaction_ids))
|
||||
.where(AgentTransaction.status == TransactionStatus.WAITING) # Утверждаем только транзакции в статусе 'waiting'
|
||||
).all()
|
||||
|
||||
for agent_trans in transactions_to_approve:
|
||||
agent_trans.status = TransactionStatus.NEW # Переводим в статус 'new'
|
||||
agent_trans.update_dttm = datetime.utcnow()
|
||||
db.add(agent_trans)
|
||||
approved_count += 1
|
||||
|
||||
db.commit()
|
||||
|
||||
return {"msg": f"Переведено в статус NEW {approved_count} транзакций", "approved_count": approved_count}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user