import { query } from '../database/connection'; import { v4 as uuidv4 } from 'uuid'; import dotenv from 'dotenv'; // Загружаем переменные окружения dotenv.config(); /** * Скрипт для обновления механизма уведомлений */ export async function enhanceNotifications() { try { console.log('Enhancing notifications system...'); console.log('DB Connection Details:'); console.log(`- Host: ${process.env.DB_HOST}`); console.log(`- Port: ${process.env.DB_PORT}`); console.log(`- Database: ${process.env.DB_NAME}`); // 1. Создаем расширение для генерации UUID, если его нет await query(` CREATE EXTENSION IF NOT EXISTS "uuid-ossp" `); // 2. Создаем таблицу для хранения типов уведомлений и шаблонов сообщений, если её нет await query(` CREATE TABLE IF NOT EXISTS notification_templates ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), type VARCHAR(50) NOT NULL UNIQUE, title TEXT NOT NULL, message_template TEXT NOT NULL, button_template JSONB NOT NULL, created_at TIMESTAMP DEFAULT NOW() ) `); // 2. Вставляем базовые шаблоны для различных типов уведомлений const templates = [ { id: uuidv4(), type: 'new_like', title: 'Новый лайк!', message_template: '❤️ *{{name}}* поставил(а) вам лайк!\n\nВозраст: {{age}}\n{{city}}\n\nОтветьте взаимностью или посмотрите профиль.', button_template: JSON.stringify({ inline_keyboard: [ [{ text: '👀 Посмотреть профиль', callback_data: 'view_profile:{{userId}}' }], [ { text: '❤️ Лайк в ответ', callback_data: 'like_back:{{userId}}' }, { text: '⛔️ Пропустить', callback_data: 'dislike_profile:{{userId}}' } ], [{ text: '💕 Открыть все лайки', callback_data: 'view_likes' }] ] }) }, { id: uuidv4(), type: 'super_like', title: 'Супер-лайк!', message_template: '⭐️ *{{name}}* отправил(а) вам супер-лайк!\n\nВозраст: {{age}}\n{{city}}\n\nВы произвели особое впечатление! Ответьте взаимностью или посмотрите профиль.', button_template: JSON.stringify({ inline_keyboard: [ [{ text: '👀 Посмотреть профиль', callback_data: 'view_profile:{{userId}}' }], [ { text: '❤️ Лайк в ответ', callback_data: 'like_back:{{userId}}' }, { text: '⛔️ Пропустить', callback_data: 'dislike_profile:{{userId}}' } ], [{ text: '💕 Открыть все лайки', callback_data: 'view_likes' }] ] }) }, { id: uuidv4(), type: 'new_match', title: 'Новый матч!', message_template: '🎊 *Ура! Это взаимно!* 🎊\n\nВы и *{{name}}* понравились друг другу!\nВозраст: {{age}}\n{{city}}\n\nСделайте первый шаг - напишите сообщение!', button_template: JSON.stringify({ inline_keyboard: [ [{ text: '💬 Начать общение', callback_data: 'open_native_chat_{{matchId}}' }], [ { text: '👀 Посмотреть профиль', callback_data: 'view_profile:{{userId}}' }, { text: '📋 Все матчи', callback_data: 'native_chats' } ] ] }) }, { id: uuidv4(), type: 'new_message', title: 'Новое сообщение!', message_template: '💌 *Новое сообщение!*\n\nОт: *{{name}}*\n\n"{{message}}"\n\nОтветьте на сообщение прямо сейчас!', button_template: JSON.stringify({ inline_keyboard: [ [{ text: '📩 Ответить', callback_data: 'open_native_chat_{{matchId}}' }], [ { text: '👤 Профиль', callback_data: 'view_profile:{{userId}}' }, { text: '📋 Все чаты', callback_data: 'native_chats' } ] ] }) } ]; // Вставляем шаблоны с проверкой на конфликты for (const template of templates) { await query(` INSERT INTO notification_templates (id, type, title, message_template, button_template, created_at) VALUES ($1, $2, $3, $4, $5, NOW()) ON CONFLICT (type) DO UPDATE SET title = $3, message_template = $4, button_template = $5 `, [template.id, template.type, template.title, template.message_template, template.button_template]); } console.log('✅ Notification templates updated successfully'); return true; } catch (error) { console.error('❌ Error enhancing notifications:', error); return false; } } // Если запускаем файл напрямую if (require.main === module) { enhanceNotifications().then(() => { console.log('Notification system enhancement completed'); process.exit(0); }).catch(error => { console.error('Error:', error); process.exit(1); }); }