import { Router, Request, Response } from 'express'; import { moderationText } from './initiatives-ai-agents/moderation'; import { generatePicture } from './initiatives-ai-agents/picture'; const { getSupabaseClient } = require('./supabaseClient'); const router = Router(); // Обработчик для модерации текста router.post('/moderate', async (req: Request, res: Response) => { try { const { title, body } = req.body; if (!title || !body) { res.status(400).json({ error: 'Заголовок и текст обязательны' }); return; } const [comment, fixedText, isApproved] = await moderationText(title, body); res.json({ comment, fixedText, isApproved }); } catch (error: any) { console.error('Error in moderation:', error); res.status(500).json({ error: 'Внутренняя ошибка сервера', details: error.message }); } }); // Обработчик для генерации изображений router.post('/generate-image', async (req: Request, res: Response) => { try { const { prompt, userId } = req.body; if (!prompt) { res.status(400).json({ error: 'Необходимо указать запрос для генерации' }); return; } // Получаем изображение const imageBuffer = await generatePicture(prompt); // Получаем Supabase клиент const supabase = getSupabaseClient(); // Генерируем уникальное имя файла const timestamp = Date.now(); const filename = `image_${userId || 'user'}_${timestamp}.jpg`; // Загружаем в Supabase const { data, error } = await supabase.storage .from('images') .upload(filename, imageBuffer, { contentType: 'image/jpeg', upsert: true }); if (error) { res.status(500).json({ error: 'Ошибка при сохранении изображения' }); return; } // Получаем публичный URL изображения const { data: urlData } = supabase.storage .from('images') .getPublicUrl(filename); res.json({ success: true, imageUrl: urlData.publicUrl, imagePath: filename }); } catch (error: any) { console.error('Error in image generation:', error); res.status(500).json({ error: 'Внутренняя ошибка сервера', details: error.message }); } }); export default router;