/
Nnlbtz
/
knowledge-base-webapp
Обзор
Документация
Войти
/
Nnlbtz
/
knowledge-base-webapp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/controllers/stats.controller.ts
127 строк
5 KB
IS
Initial commit: Knowledge Base Web App
02 июн 2025, 14:01
02 июн 2025, 14:01
16bbe17
Код
Авторство
О чём код?
import { Context } from 'telegraf'; import { statsService } from '../services/stats.service'; import { logger } from '../utils/logger'; export async function handleStats(ctx: Context) { try { const stats = await statsService.getGeneralStats(); await ctx.reply( '📊 Общая статистика:\n\n' + `📚 Статей: ${stats.articles}\n` + `📁 Категорий: ${stats.categories}\n` + `🏷️ Тегов: ${stats.tags}\n` + `👥 Пользователей: ${stats.users}\n\n` + 'Доступные команды:\n' + '/stats_categories - Статистика по категориям\n' + '/stats_tags - Статистика по тегам\n' + '/stats_users - Статистика по пользователям\n' + '/stats_time - Статистика по времени' ); } catch (error) { logger.error('Error in handleStats:', error); await ctx.reply('Произошла ошибка при получении статистики. Пожалуйста, попробуйте позже.'); } } export async function handleCategoryStats(ctx: Context) { try { const stats = await statsService.getCategoryStats(); if (stats.length === 0) { await ctx.reply('Нет данных для отображения статистики по категориям'); return; } const response = stats.map(category => `📁 ${category.name}\n` + `📚 Статей: ${category.articlesCount}\n` ).join('\n'); await ctx.reply( '📊 Статистика по категориям:\n\n' + response ); } catch (error) { logger.error('Error in handleCategoryStats:', error); await ctx.reply('Произошла ошибка при получении статистики по категориям. Пожалуйста, попробуйте позже.'); } } export async function handleTagStats(ctx: Context) { try { const stats = await statsService.getTagStats(); if (stats.length === 0) { await ctx.reply('Нет данных для отображения статистики по тегам'); return; } const response = stats.map(tag => `🏷️ ${tag.name}\n` + `📚 Статей: ${tag.articlesCount}\n` ).join('\n'); await ctx.reply( '📊 Статистика по тегам:\n\n' + response ); } catch (error) { logger.error('Error in handleTagStats:', error); await ctx.reply('Произошла ошибка при получении статистики по тегам. Пожалуйста, попробуйте позже.'); } } export async function handleUserStats(ctx: Context) { try { const stats = await statsService.getUserStats(); if (stats.length === 0) { await ctx.reply('Нет данных для отображения статистики по пользователям'); return; } const response = stats.map(user => `👤 ${user.username}\n` + `📚 Статей: ${user.articlesCount}\n` ).join('\n'); await ctx.reply( '📊 Статистика по пользователям:\n\n' + response ); } catch (error) { logger.error('Error in handleUserStats:', error); await ctx.reply('Произошла ошибка при получении статистики по пользователям. Пожалуйста, попробуйте позже.'); } } export async function handleTimeStats(ctx: Context) { try { const stats = await statsService.getTimeStats(); if (stats.total === 0) { await ctx.reply('Нет данных для отображения статистики по времени'); return; } // Получаем последние 5 месяцев const lastMonths = Array.from(stats.byMonth.entries()) .sort((a, b) => b[0].localeCompare(a[0])) .slice(0, 5); const monthStats = lastMonths.map(([month, count]) => `📅 ${month}: ${count} статей` ).join('\n'); await ctx.reply( '📊 Статистика по времени:\n\n' + `📚 Всего статей: ${stats.total}\n\n` + 'Последние 5 месяцев:\n' + monthStats ); } catch (error) { logger.error('Error in handleTimeStats:', error); await ctx.reply('Произошла ошибка при получении статистики по времени. Пожалуйста, попробуйте позже.'); } }