/
Nnlbtz
/
knowledge-base-webapp
Обзор
Документация
Войти
/
Nnlbtz
/
knowledge-base-webapp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/controllers/tag.controller.ts
151 строка
5 KB
IS
Initial commit: Knowledge Base Web App
02 июн 2025, 14:01
02 июн 2025, 14:01
16bbe17
Код
Авторство
О чём код?
import { Context } from 'telegraf'; import { tagService } from '../services/tag.service'; import { logger } from '../utils/logger'; // Состояния для создания тега const tagStates = new Map<number, { state: 'name'; data: { name?: string; }; }>(); export async function handleNewTag(ctx: Context) { try { const userId = ctx.from?.id; if (!userId) { await ctx.reply('Ошибка: не удалось определить пользователя'); return; } tagStates.set(userId, { state: 'name', data: {} }); await ctx.reply('Введите название тега:'); } catch (error) { logger.error('Error in handleNewTag:', error); await ctx.reply('Произошла ошибка. Пожалуйста, попробуйте позже.'); } } export async function handleTagInput(ctx: Context) { try { const userId = ctx.from?.id; if (!userId) { await ctx.reply('Ошибка: не удалось определить пользователя'); return; } const state = tagStates.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 tag = await tagService.create({ name: text }); tagStates.delete(userId); await ctx.reply( `Тег успешно создан!\n\n` + `ID: ${tag.id}\n` + `Название: ${tag.name}` ); } } catch (error) { logger.error('Error in handleTagInput:', error); await ctx.reply('Произошла ошибка. Пожалуйста, попробуйте позже.'); tagStates.delete(userId); } } export async function handleListTags(ctx: Context) { try { const tags = await tagService.getAll(); if (tags.length === 0) { await ctx.reply('Теги пока не созданы'); return; } const response = tags.map(tag => `🏷️ ${tag.name}\n` + `📚 Статей: ${tag._count.articles}\n` + `🔗 ID: ${tag.id}\n` ).join('\n'); await ctx.reply(response); } catch (error) { logger.error('Error in handleListTags:', error); await ctx.reply('Произошла ошибка при получении списка тегов. Пожалуйста, попробуйте позже.'); } } export async function handleTagArticles(ctx: Context) { try { const tagId = parseInt(ctx.message?.text?.replace('/tag', '').trim() || ''); if (isNaN(tagId)) { await ctx.reply('Пожалуйста, укажите ID тега после команды /tag'); return; } const result = await tagService.getArticlesByTag(tagId); if (result.articles.length === 0) { await ctx.reply('По этому тегу пока нет статей'); return; } const response = result.articles.map(article => `📚 ${article.title}\n` + `👤 Автор: ${article.author.username || 'Неизвестно'}\n` + `📁 Категория: ${article.category?.name || 'Без категории'}\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 handleTagArticles:', error); await ctx.reply('Произошла ошибка при получении статей по тегу. Пожалуйста, попробуйте позже.'); } } export async function handleSearchTags(ctx: Context) { try { const query = ctx.message?.text?.replace('/searchtags', '').trim(); if (!query) { await ctx.reply('Пожалуйста, укажите поисковый запрос после команды /searchtags'); return; } const tags = await tagService.searchByName(query); if (tags.length === 0) { await ctx.reply('По вашему запросу ничего не найдено'); return; } const response = tags.map(tag => `🏷️ ${tag.name}\n` + `📚 Статей: ${tag._count.articles}\n` + `🔗 ID: ${tag.id}\n` ).join('\n'); await ctx.reply(response); } catch (error) { logger.error('Error in handleSearchTags:', error); await ctx.reply('Произошла ошибка при поиске тегов. Пожалуйста, попробуйте позже.'); } }