/
Nnlbtz
/
knowledge-base-webapp
Обзор
Документация
Войти
/
Nnlbtz
/
knowledge-base-webapp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/controllers/category.controller.ts
123 строки
4 KB
IS
Initial commit: Knowledge Base Web App
02 июн 2025, 14:01
02 июн 2025, 14:01
16bbe17
Код
Авторство
О чём код?
import { Context } from 'telegraf'; import { categoryService } from '../services/category.service'; import { logger } from '../utils/logger'; // Состояния для создания категории const categoryStates = new Map<number, { state: 'name'; data: { name?: string; }; }>(); export async function handleNewCategory(ctx: Context) { try { const userId = ctx.from?.id; if (!userId) { await ctx.reply('Ошибка: не удалось определить пользователя'); return; } categoryStates.set(userId, { state: 'name', data: {} }); await ctx.reply('Введите название категории:'); } catch (error) { logger.error('Error in handleNewCategory:', error); await ctx.reply('Произошла ошибка. Пожалуйста, попробуйте позже.'); } } export async function handleCategoryInput(ctx: Context) { try { const userId = ctx.from?.id; if (!userId) { await ctx.reply('Ошибка: не удалось определить пользователя'); return; } const state = categoryStates.get(userId); if (!state) { return; } const text = ctx.message?.text; if (!text) { await ctx.reply('Пожалуйста, отправьте текстовое сообщение'); return; } if (state.state === 'name') { state.data.name = text; const category = await categoryService.create({ name: text }); categoryStates.delete(userId); await ctx.reply( `Категория успешно создана!\n\n` + `ID: ${category.id}\n` + `Название: ${category.name}` ); } } catch (error) { logger.error('Error in handleCategoryInput:', error); await ctx.reply('Произошла ошибка. Пожалуйста, попробуйте позже.'); categoryStates.delete(userId); } } export async function handleListCategories(ctx: Context) { try { const categories = await categoryService.getAll(); if (categories.length === 0) { await ctx.reply('Категории пока не созданы'); return; } const response = categories.map(category => `📁 ${category.name}\n` + `📚 Статей: ${category._count.articles}\n` + `🔗 ID: ${category.id}\n` ).join('\n'); await ctx.reply(response); } catch (error) { logger.error('Error in handleListCategories:', error); await ctx.reply('Произошла ошибка при получении списка категорий. Пожалуйста, попробуйте позже.'); } } export async function handleCategoryArticles(ctx: Context) { try { const categoryId = parseInt(ctx.message?.text?.replace('/category', '').trim() || ''); if (isNaN(categoryId)) { await ctx.reply('Пожалуйста, укажите ID категории после команды /category'); return; } const result = await categoryService.getArticlesByCategory(categoryId); if (result.articles.length === 0) { await ctx.reply('В этой категории пока нет статей'); return; } const response = result.articles.map(article => `📚 ${article.title}\n` + `👤 Автор: ${article.author.username || 'Неизвестно'}\n` + `📅 Создано: ${article.createdAt.toLocaleDateString()}\n` + `🔗 ID: ${article.id}\n` ).join('\n'); await ctx.reply( response + `\n\nСтраница ${result.page} из ${result.totalPages}\n` + `Всего статей: ${result.total}` ); } catch (error) { logger.error('Error in handleCategoryArticles:', error); await ctx.reply('Произошла ошибка при получении статей категории. Пожалуйста, попробуйте позже.'); } }