78 lines
2.8 KiB
TypeScript
78 lines
2.8 KiB
TypeScript
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;
|