diff --git a/handlers/admin/stats/stats_handler.py b/handlers/admin/stats/stats_handler.py index 8b7355ec..ef772ffd 100644 --- a/handlers/admin/stats/stats_handler.py +++ b/handlers/admin/stats/stats_handler.py @@ -31,6 +31,14 @@ async def handle_stats(callback_query: CallbackQuery, session: Any): total_payments_today = int( await session.fetchval("SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= CURRENT_DATE") ) + total_payments_yesterday = int( + await session.fetchval(""" + SELECT COALESCE(SUM(amount), 0) + FROM payments + WHERE created_at >= CURRENT_DATE - interval '1 day' + AND created_at < CURRENT_DATE + """) + ) total_payments_week = int( await session.fetchval( "SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= date_trunc('week', CURRENT_DATE)" @@ -42,17 +50,33 @@ async def handle_stats(callback_query: CallbackQuery, session: Any): ) ) total_payments_last_month = int( - await session.fetchval( - """ + await session.fetchval(""" SELECT COALESCE(SUM(amount), 0) FROM payments WHERE created_at >= date_trunc('month', CURRENT_DATE - interval '1 month') AND created_at < date_trunc('month', CURRENT_DATE) - """ - ) + """) ) total_payments_all_time = int(await session.fetchval("SELECT COALESCE(SUM(amount), 0) FROM payments")) + registrations_today = await session.fetchval("SELECT COUNT(*) FROM users WHERE created_at >= CURRENT_DATE") + registrations_yesterday = await session.fetchval(""" + SELECT COUNT(*) FROM users + WHERE created_at >= CURRENT_DATE - interval '1 day' + AND created_at < CURRENT_DATE + """) + registrations_week = await session.fetchval( + "SELECT COUNT(*) FROM users WHERE created_at >= date_trunc('week', CURRENT_DATE)" + ) + registrations_month = await session.fetchval( + "SELECT COUNT(*) FROM users WHERE created_at >= date_trunc('month', CURRENT_DATE)" + ) + registrations_last_month = await session.fetchval(""" + SELECT COUNT(*) FROM users + WHERE created_at >= date_trunc('month', CURRENT_DATE - interval '1 month') + AND created_at < date_trunc('month', CURRENT_DATE) + """) + all_keys = await session.fetch("SELECT created_at, expiry_time FROM keys") def count_subscriptions_by_duration(keys): @@ -78,14 +102,6 @@ async def handle_stats(callback_query: CallbackQuery, session: Any): subs_all_time = count_subscriptions_by_duration(all_keys) - registrations_today = await session.fetchval("SELECT COUNT(*) FROM users WHERE created_at >= CURRENT_DATE") - registrations_week = await session.fetchval( - "SELECT COUNT(*) FROM users WHERE created_at >= date_trunc('week', CURRENT_DATE)" - ) - registrations_month = await session.fetchval( - "SELECT COUNT(*) FROM users WHERE created_at >= date_trunc('month', CURRENT_DATE)" - ) - users_updated_today = await session.fetchval("SELECT COUNT(*) FROM users WHERE updated_at >= CURRENT_DATE") active_keys = await session.fetchval( @@ -93,8 +109,6 @@ async def handle_stats(callback_query: CallbackQuery, session: Any): int(datetime.utcnow().timestamp() * 1000), ) expired_keys = total_keys - active_keys - moscow_tz = pytz.timezone("Europe/Moscow") - update_time = datetime.now(moscow_tz).strftime("%d.%m.%y %H:%M:%S") hot_leads_count = await session.fetchval(""" SELECT COUNT(DISTINCT u.tg_id) @@ -105,12 +119,17 @@ async def handle_stats(callback_query: CallbackQuery, session: Any): AND k.tg_id IS NULL """) + moscow_tz = pytz.timezone("Europe/Moscow") + update_time = datetime.now(moscow_tz).strftime("%d.%m.%y %H:%M:%S") + stats_message = ( "📊 Статистика проекта\n\n" "👤 Пользователи:\n" f"├ 🗓️ За день: {registrations_today}\n" + f"├ 🗓️ Вчера: {registrations_yesterday}\n" f"├ 📆 За неделю: {registrations_week}\n" f"├ 🗓️ За месяц: {registrations_month}\n" + f"├ 📅 За прошлый месяц: {registrations_last_month}\n" f"└ 🌐 Всего: {total_users}\n\n" "💡 Активность:\n" f"└ 👥 Сегодня были активны: {users_updated_today}\n\n" @@ -128,6 +147,7 @@ async def handle_stats(callback_query: CallbackQuery, session: Any): f" • 🗓️ 12 мес: {subs_all_time['12']}\n\n" "💰 Финансы:\n" f"├ 📅 За день: {total_payments_today} ₽\n" + f"├ 📆 Вчера: {total_payments_yesterday} ₽\n" f"├ 📆 За неделю: {total_payments_week} ₽\n" f"├ 📆 За месяц: {total_payments_month} ₽\n" f"├ 📆 За прошлый месяц: {total_payments_last_month} ₽\n"