Обновлены функции получения данных в эндпоинтах для учета компании текущего аккаунта, улучшена фильтрация по company_id в запросах к базе данных.

This commit is contained in:
Redsandyg 2025-06-07 13:29:30 +03:00
parent 5d14969f82
commit 6b8b4ac059

28
main.py
View File

@ -333,18 +333,18 @@ def get_stat(current_tg_agent: TgAgent = Depends(get_current_tg_agent), db: Sess
@app.get("/dashboard/cards", tags=["bff"]) @app.get("/dashboard/cards", tags=["bff"])
def get_dashboard_cards(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)): def get_dashboard_cards(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)):
# 1. Общий доход - сумма всех Sale.cost # 1. Общий доход - сумма всех Sale.cost
total_revenue = db.exec(select(Sale)).all() total_revenue = db.exec(select(Sale).where(Sale.company_id == current_account.company_id)).all()
totalRevenue = sum(sale.cost for sale in total_revenue) totalRevenue = sum(sale.cost for sale in total_revenue)
# 2. Общие выплаты - сумма всех Sale.crediting # 2. Общие выплаты - сумма всех Sale.crediting
totalPayouts = sum(sale.crediting for sale in total_revenue) totalPayouts = sum(sale.crediting for sale in total_revenue)
# 3. Активные рефералы - количество уникальных TgAgent.tg_id # 3. Активные рефералы - количество уникальных TgAgent.tg_id
unique_agents = db.exec(select(TgAgent.tg_id)).all() unique_agents = db.exec(select(TgAgent.tg_id).where(TgAgent.company_id == current_account.company_id)).all()
activeReferrals = len(set(unique_agents)) activeReferrals = len(set(unique_agents))
# 4. Ожидающие выплаты - сумма AgentTransaction со статусом 'waiting' # 4. Ожидающие выплаты - сумма AgentTransaction со статусом 'waiting'
pending_agent_transactions = db.exec(select(AgentTransaction).where(AgentTransaction.status == 'waiting')).all() pending_agent_transactions = db.exec(select(AgentTransaction).join(TgAgent).where(TgAgent.company_id == current_account.company_id).where(AgentTransaction.status == 'waiting')).all()
pendingPayouts = sum(t.amount for t in pending_agent_transactions) pendingPayouts = sum(t.amount for t in pending_agent_transactions)
# 5. Количество продаж # 5. Количество продаж
@ -366,7 +366,7 @@ def get_dashboard_chart_total(current_account: Account = Depends(get_current_acc
func.strftime('%Y-%m-%d', Sale.create_dttm).label('date'), func.strftime('%Y-%m-%d', Sale.create_dttm).label('date'),
func.sum(Sale.cost).label('revenue'), func.sum(Sale.cost).label('revenue'),
func.count(Sale.id).label('sales') func.count(Sale.id).label('sales')
).group_by(func.strftime('%Y-%m-%d', Sale.create_dttm)) ).where(Sale.company_id == current_account.company_id).group_by(func.strftime('%Y-%m-%d', Sale.create_dttm))
.order_by(func.strftime('%Y-%m-%d', Sale.create_dttm)) .order_by(func.strftime('%Y-%m-%d', Sale.create_dttm))
).all() ).all()
# Преобразуем результат в нужный формат # Преобразуем результат в нужный формат
@ -379,7 +379,7 @@ def get_dashboard_chart_total(current_account: Account = Depends(get_current_acc
@app.get("/dashboard/chart/agent", tags=["bff"]) @app.get("/dashboard/chart/agent", tags=["bff"])
def get_dashboard_chart_agent(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)): def get_dashboard_chart_agent(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)):
# Получаем всех агентов # Получаем всех агентов
agents = db.exec(select(TgAgent)).all() agents = db.exec(select(TgAgent).where(TgAgent.company_id == current_account.company_id)).all()
result = [] result = []
for agent in agents: for agent in agents:
# Получаем все рефы этого агента # Получаем все рефы этого агента
@ -410,7 +410,7 @@ def get_agents_stat(
date_end: str = Query(None), date_end: str = Query(None),
current_account: Account = Depends(get_current_account), current_account: Account = Depends(get_current_account),
): ):
agents_query = select(TgAgent) agents_query = select(TgAgent).where(TgAgent.company_id == current_account.company_id)
if date_start: if date_start:
agents_query = agents_query.where(TgAgent.create_dttm >= date_start) agents_query = agents_query.where(TgAgent.create_dttm >= date_start)
if date_end: if date_end:
@ -450,7 +450,7 @@ def get_referrals_stat(
date_end: str = Query(None), date_end: str = Query(None),
current_account: Account = Depends(get_current_account), current_account: Account = Depends(get_current_account),
): ):
refs_query = select(Ref) refs_query = select(Ref).join(TgAgent).where(TgAgent.company_id == current_account.company_id)
if date_start: if date_start:
refs_query = refs_query.where(Ref.create_dttm >= date_start) refs_query = refs_query.where(Ref.create_dttm >= date_start)
if date_end: if date_end:
@ -478,7 +478,7 @@ def get_sales_stat(
date_end: str = Query(None), date_end: str = Query(None),
current_account: Account = Depends(get_current_account), current_account: Account = Depends(get_current_account),
): ):
sales_query = select(Sale) sales_query = select(Sale).where(Sale.company_id == current_account.company_id)
if date_start: if date_start:
sales_query = sales_query.where(Sale.create_dttm >= date_start) sales_query = sales_query.where(Sale.create_dttm >= date_start)
if date_end: if date_end:
@ -506,15 +506,15 @@ def get_sales_stat(
@app.get("/billing/cards", tags=["bff"]) @app.get("/billing/cards", tags=["bff"])
def get_billing_cards(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)): def get_billing_cards(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)):
# 1. cost - Общий заработок (сумма всех Sale.cost) # 1. cost - Общий заработок (сумма всех Sale.cost)
sales = db.exec(select(Sale)).all() sales = db.exec(select(Sale).where(Sale.company_id == current_account.company_id)).all()
cost = sum(sale.cost for sale in sales) cost = sum(sale.cost for sale in sales)
# 2. crediting - Общие выплаты (сумма PartnerTransaction типа 'agent_payout' со статусом 'done') # 2. crediting - Общие выплаты (сумма PartnerTransaction типа 'agent_payout' со статусом 'done')
completed_payouts = db.exec(select(PartnerTransaction).where(PartnerTransaction.type == 'agent_payout').where(PartnerTransaction.status == 'done')).all() completed_payouts = db.exec(select(PartnerTransaction).where(PartnerTransaction.type == 'agent_payout').where(PartnerTransaction.status == 'done').where(PartnerTransaction.company_id == current_account.company_id)).all()
crediting = sum(t.amount for t in completed_payouts) crediting = sum(t.amount for t in completed_payouts)
# 3. pendingPayouts - Доступно к выводу всеми партнерами (сумма всех доступных балансов агентов) # 3. pendingPayouts - Доступно к выводу всеми партнерами (сумма всех доступных балансов агентов)
agent_balances = db.exec(select(AgentBalance)).all() agent_balances = db.exec(select(AgentBalance).join(TgAgent).where(TgAgent.company_id == current_account.company_id)).all()
pendingPayouts = sum(balance.available_balance for balance in agent_balances) pendingPayouts = sum(balance.available_balance for balance in agent_balances)
return { return {
@ -532,7 +532,7 @@ def get_billing_payouts_transactions(
): ):
# Используем AgentTransaction вместо Transaction # Используем AgentTransaction вместо Transaction
# Явно выбираем обе модели для корректной распаковки # Явно выбираем обе модели для корректной распаковки
query = select(AgentTransaction, TgAgent).join(TgAgent) query = select(AgentTransaction, TgAgent).join(TgAgent).where(TgAgent.company_id == current_account.company_id)
if date_start: if date_start:
query = query.where(AgentTransaction.create_dttm >= date_start) query = query.where(AgentTransaction.create_dttm >= date_start)
if date_end: if date_end:
@ -562,7 +562,7 @@ def get_billing_chart_stat(current_account: Account = Depends(get_current_accoun
func.strftime('%Y-%m-%d', AgentTransaction.create_dttm).label('date'), func.strftime('%Y-%m-%d', AgentTransaction.create_dttm).label('date'),
AgentTransaction.status.label('status'), AgentTransaction.status.label('status'),
func.count(AgentTransaction.id).label('count') func.count(AgentTransaction.id).label('count')
).group_by( ).join(TgAgent).where(TgAgent.company_id == current_account.company_id).group_by(
func.strftime('%Y-%m-%d', AgentTransaction.create_dttm), func.strftime('%Y-%m-%d', AgentTransaction.create_dttm),
AgentTransaction.status AgentTransaction.status
).order_by( ).order_by(
@ -583,7 +583,7 @@ def get_billing_chart_pie(current_account: Account = Depends(get_current_account
select( select(
AgentTransaction.status.label('status'), AgentTransaction.status.label('status'),
func.count(AgentTransaction.id).label('count') func.count(AgentTransaction.id).label('count')
).group_by(AgentTransaction.status) ).join(TgAgent).where(TgAgent.company_id == current_account.company_id).group_by(AgentTransaction.status)
).all() ).all()
data = [ data = [
{"status": row.status, "count": row.count} {"status": row.status, "count": row.count}