Fix JSON format issues with photos and add multi-photo gallery support
This commit is contained in:
133
src/scripts/enhanceNotifications.ts
Normal file
133
src/scripts/enhanceNotifications.ts
Normal file
@@ -0,0 +1,133 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user