reorganizing the menu, reissuing the key, improving statistics, and more
This commit is contained in:
@@ -137,3 +137,58 @@ async def export_referrals_csv(referrer_tg_id: int, session: Any) -> BufferedInp
|
||||
filename = f"referrals_{referrer_tg_id}.csv"
|
||||
|
||||
return BufferedInputFile(file=csv_data, filename=filename)
|
||||
|
||||
|
||||
async def export_hot_leads_csv(session: Any) -> BufferedInputFile:
|
||||
"""
|
||||
Экспорт пользователей, которые делали платежи, но сейчас не имеют ключей.
|
||||
Возвращает: tg_id, username, first_name, last_name, updated_at
|
||||
"""
|
||||
query = """
|
||||
SELECT DISTINCT u.tg_id, u.username, u.first_name, u.last_name, u.updated_at
|
||||
FROM users u
|
||||
JOIN payments p ON u.tg_id = p.tg_id
|
||||
LEFT JOIN keys k ON u.tg_id = k.tg_id
|
||||
WHERE p.status = 'success'
|
||||
AND k.tg_id IS NULL
|
||||
ORDER BY u.updated_at DESC
|
||||
"""
|
||||
|
||||
users = await session.fetch(query)
|
||||
|
||||
buffer = StringIO()
|
||||
buffer.write("tg_id,username,first_name,last_name,updated_at\n")
|
||||
|
||||
for user in users:
|
||||
buffer.write(
|
||||
f"{user['tg_id']},{user['username'] or ''},"
|
||||
f"{user['first_name'] or ''},{user['last_name'] or ''},"
|
||||
f"{user['updated_at']}\n"
|
||||
)
|
||||
|
||||
buffer.seek(0)
|
||||
return BufferedInputFile(file=buffer.getvalue().encode("utf-8-sig"), filename="hot_leads_export.csv")
|
||||
|
||||
|
||||
async def export_keys_csv(session) -> BufferedInputFile:
|
||||
"""
|
||||
Экспорт подписок в CSV.
|
||||
"""
|
||||
keys = await session.fetch("""
|
||||
SELECT tg_id, client_id, email, created_at, expiry_time, key, server_id, is_frozen, alias
|
||||
FROM keys
|
||||
ORDER BY created_at ASC
|
||||
""")
|
||||
|
||||
buffer = StringIO()
|
||||
buffer.write("tg_id,client_id,email,created_at,expiry_time,key,server_id,is_frozen,alias\n")
|
||||
|
||||
for row in keys:
|
||||
buffer.write(
|
||||
f"{row['tg_id']},{row['client_id']},{row['email']},"
|
||||
f"{row['created_at']},{row['expiry_time']},{row['key']},"
|
||||
f"{row['server_id']},{row['is_frozen']},{row['alias'] or ''}\n"
|
||||
)
|
||||
|
||||
buffer.seek(0)
|
||||
return BufferedInputFile(file=buffer.getvalue().encode("utf-8-sig"), filename="keys_export.csv")
|
||||
|
||||
Reference in New Issue
Block a user