/
Nnlbtz
/
knowledge-base-webapp
Обзор
Документация
Войти
/
Nnlbtz
/
knowledge-base-webapp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/controllers/export.controller.ts
134 строки
4 KB
IS
Initial commit: Knowledge Base Web App
02 июн 2025, 14:01
02 июн 2025, 14:01
16bbe17
Код
Авторство
О чём код?
import { Context } from 'telegraf'; import { exportService } from '../services/export.service'; import { logger } from '../utils/logger'; import * as fs from 'fs'; // Состояния для импорта const importStates = new Map<number, { state: 'waiting_file'; data: { fileName?: string; }; }>(); export async function handleExport(ctx: Context) { try { await ctx.reply('Начинаю экспорт данных...'); const filePath = await exportService.exportToJson(); const stats = fs.statSync(filePath); await ctx.reply( `✅ Экспорт успешно завершен!\n\n` + `📁 Файл: ${path.basename(filePath)}\n` + `📊 Размер: ${(stats.size / 1024).toFixed(2)} KB\n` + `📅 Дата: ${stats.mtime.toLocaleString()}` ); } catch (error) { logger.error('Error in handleExport:', error); await ctx.reply('Произошла ошибка при экспорте данных. Пожалуйста, попробуйте позже.'); } } export async function handleImport(ctx: Context) { try { const userId = ctx.from?.id; if (!userId) { await ctx.reply('Ошибка: не удалось определить пользователя'); return; } const exports = await exportService.getExportsList(); if (exports.length === 0) { await ctx.reply('Нет доступных файлов для импорта'); return; } const response = exports.map((exp, index) => `${index + 1}. ${exp.name}\n` + ` 📊 Размер: ${(exp.size / 1024).toFixed(2)} KB\n` + ` 📅 Дата: ${exp.date.toLocaleString()}\n` ).join('\n'); importStates.set(userId, { state: 'waiting_file', data: {} }); await ctx.reply( 'Доступные файлы для импорта:\n\n' + response + '\nОтправьте номер файла для импорта:' ); } catch (error) { logger.error('Error in handleImport:', error); await ctx.reply('Произошла ошибка при получении списка файлов. Пожалуйста, попробуйте позже.'); } } export async function handleImportInput(ctx: Context) { try { const userId = ctx.from?.id; if (!userId) { await ctx.reply('Ошибка: не удалось определить пользователя'); return; } const state = importStates.get(userId); if (!state) { return; } const text = ctx.message?.text; if (!text) { await ctx.reply('Пожалуйста, отправьте текстовое сообщение'); return; } if (state.state === 'waiting_file') { const fileIndex = parseInt(text) - 1; const exports = await exportService.getExportsList(); if (isNaN(fileIndex) || fileIndex < 0 || fileIndex >= exports.length) { await ctx.reply('Пожалуйста, выберите корректный номер файла'); return; } const selectedFile = exports[fileIndex]; await ctx.reply('Начинаю импорт данных...'); await exportService.importFromJson(selectedFile.path); importStates.delete(userId); await ctx.reply( `✅ Импорт успешно завершен!\n\n` + `📁 Файл: ${selectedFile.name}\n` + `📅 Дата импорта: ${new Date().toLocaleString()}` ); } } catch (error) { logger.error('Error in handleImportInput:', error); await ctx.reply('Произошла ошибка при импорте данных. Пожалуйста, попробуйте позже.'); importStates.delete(userId); } } export async function handleListExports(ctx: Context) { try { const exports = await exportService.getExportsList(); if (exports.length === 0) { await ctx.reply('Нет доступных файлов экспорта'); return; } const response = exports.map(exp => `📁 ${exp.name}\n` + `📊 Размер: ${(exp.size / 1024).toFixed(2)} KB\n` + `📅 Дата: ${exp.date.toLocaleString()}\n` ).join('\n'); await ctx.reply(response); } catch (error) { logger.error('Error in handleListExports:', error); await ctx.reply('Произошла ошибка при получении списка экспортов. Пожалуйста, попробуйте позже.'); } }