Files
tg_tinder_bot/src/scripts/enhanceNotifications.ts

134 lines
6.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
});
}