134 lines
6.4 KiB
TypeScript
134 lines
6.4 KiB
TypeScript
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);
|
||
});
|
||
}
|