mass refactor

This commit is contained in:
2025-09-18 08:31:14 +09:00
parent 856bf3ca2a
commit bdd7d0424f
58 changed files with 3009 additions and 291 deletions

View File

@@ -0,0 +1,43 @@
// add-hobbies-column.js
// Скрипт для добавления колонки hobbies в таблицу profiles
const { Pool } = require('pg');
// Настройки подключения к базе данных
const pool = new Pool({
host: '192.168.0.102',
port: 5432,
database: 'telegram_tinder_bot',
user: 'trevor',
password: 'Cl0ud_1985!'
});
async function addHobbiesColumn() {
try {
console.log('Подключение к базе данных...');
const client = await pool.connect();
console.log('Добавление колонки hobbies в таблицу profiles...');
// SQL запрос для добавления колонки
const sql = `
ALTER TABLE profiles
ADD COLUMN IF NOT EXISTS hobbies TEXT;
`;
await client.query(sql);
console.log('✅ Колонка hobbies успешно добавлена в таблицу profiles');
// Закрытие соединения
client.release();
await pool.end();
console.log('Подключение к базе данных закрыто');
} catch (error) {
console.error('❌ Ошибка при добавлении колонки:', error);
await pool.end();
process.exit(1);
}
}
// Запуск функции
addHobbiesColumn();

View File

@@ -0,0 +1,44 @@
// add-premium-columns.js
// Скрипт для добавления колонок premium и premium_expires_at в таблицу users
const { Pool } = require('pg');
// Настройки подключения к базе данных - используем те же настройки, что и раньше
const pool = new Pool({
host: '192.168.0.102',
port: 5432,
database: 'telegram_tinder_bot',
user: 'trevor',
password: 'Cl0ud_1985!'
});
async function addPremiumColumns() {
try {
console.log('Подключение к базе данных...');
const client = await pool.connect();
console.log('Добавление колонок premium и premium_expires_at в таблицу users...');
// SQL запрос для добавления колонок
const sql = `
ALTER TABLE users
ADD COLUMN IF NOT EXISTS premium BOOLEAN DEFAULT FALSE,
ADD COLUMN IF NOT EXISTS premium_expires_at TIMESTAMP;
`;
await client.query(sql);
console.log('✅ Колонки premium и premium_expires_at успешно добавлены в таблицу users');
// Закрытие соединения
client.release();
await pool.end();
console.log('Подключение к базе данных закрыто');
} catch (error) {
console.error('❌ Ошибка при добавлении колонок:', error);
await pool.end();
process.exit(1);
}
}
// Запуск функции
addPremiumColumns();

View File

@@ -0,0 +1,40 @@
// add-premium-columns.js
// Скрипт для добавления колонок premium и premium_expires_at в таблицу users
const { Client } = require('pg');
// Настройки подключения к базе данных
const client = new Client({
host: '192.168.0.102',
port: 5432,
user: 'trevor',
password: 'Cl0ud_1985!',
database: 'telegram_tinder_bot'
});
async function addPremiumColumns() {
try {
await client.connect();
console.log('Подключение к базе данных успешно установлено');
// SQL запрос для добавления колонок
const sql = `
ALTER TABLE users
ADD COLUMN IF NOT EXISTS premium BOOLEAN DEFAULT FALSE,
ADD COLUMN IF NOT EXISTS premium_expires_at TIMESTAMP;
`;
await client.query(sql);
console.log('Колонки premium и premium_expires_at успешно добавлены в таблицу users');
// Закрываем подключение
await client.end();
console.log('Подключение к базе данных закрыто');
} catch (error) {
console.error('Ошибка при добавлении колонок:', error);
await client.end();
}
}
// Запуск функции
addPremiumColumns();

View File

@@ -0,0 +1,28 @@
// add-premium-columns.ts
// Скрипт для добавления колонок premium и premium_expires_at в таблицу users
import { query } from '../src/database/connection';
async function addPremiumColumns() {
try {
console.log('Добавление колонок premium и premium_expires_at в таблицу users...');
// SQL запрос для добавления колонок
const sql = `
ALTER TABLE users
ADD COLUMN IF NOT EXISTS premium BOOLEAN DEFAULT FALSE,
ADD COLUMN IF NOT EXISTS premium_expires_at TIMESTAMP;
`;
await query(sql);
console.log('✅ Колонки premium и premium_expires_at успешно добавлены в таблицу users');
process.exit(0);
} catch (error) {
console.error('❌ Ошибка при добавлении колонок:', error);
process.exit(1);
}
}
// Запуск функции
addPremiumColumns();

View File

@@ -0,0 +1,101 @@
// Исправленный код для создания профиля
const { Client } = require('pg');
const { v4: uuidv4 } = require('uuid');
// Получаем аргументы из командной строки
const args = process.argv.slice(2);
const telegramId = args[0];
const name = args[1];
const age = parseInt(args[2]);
const gender = args[3];
const city = args[4];
const bio = args[5];
const photoFileId = args[6];
// Проверяем, что все необходимые аргументы предоставлены
if (!telegramId || !name || !age || !gender || !city || !bio || !photoFileId) {
console.error('Необходимо указать все параметры: telegramId, name, age, gender, city, bio, photoFileId');
process.exit(1);
}
// Устанавливаем соединение с базой данных
const client = new Client({
host: '192.168.0.102',
port: 5432,
user: 'trevor',
password: 'Cl0ud_1985!',
database: 'telegram_tinder_bot'
});
async function createProfile() {
try {
await client.connect();
// Шаг 1: Создаем или обновляем пользователя
const userResult = await client.query(`
INSERT INTO users (telegram_id, username, first_name, last_name)
VALUES ($1, $2, $3, $4)
ON CONFLICT (telegram_id) DO UPDATE SET
username = EXCLUDED.username,
first_name = EXCLUDED.first_name,
last_name = EXCLUDED.last_name
RETURNING id
`, [parseInt(telegramId), null, name, null]);
const userId = userResult.rows[0].id;
// Шаг 2: Создаем профиль
const profileId = uuidv4();
const now = new Date();
const interestedIn = gender === 'male' ? 'female' : 'male';
const columns = [
'id', 'user_id', 'name', 'age', 'gender', 'interested_in',
'bio', 'city', 'photos', 'is_verified',
'is_visible', 'created_at', 'updated_at'
].join(', ');
const values = [
profileId, userId, name, age, gender, interestedIn,
bio, city, JSON.stringify([photoFileId]),
false, true, now, now
];
const placeholders = values.map((_, i) => `$${i + 1}`).join(', ');
await client.query(`
INSERT INTO profiles (${columns})
VALUES (${placeholders})
`, values);
console.log('Профиль успешно создан!');
// Возвращаем информацию о созданном профиле
return {
userId,
profileId,
name,
age,
gender,
interestedIn,
bio,
city,
photos: [photoFileId]
};
} catch (error) {
console.error('Ошибка при создании профиля:', error);
throw error;
} finally {
await client.end();
}
}
createProfile()
.then(profile => {
console.log('Созданный профиль:', profile);
process.exit(0);
})
.catch(error => {
console.error('Создание профиля не удалось:', error);
process.exit(1);
});

62
scripts/migrate-sync.js Normal file
View File

@@ -0,0 +1,62 @@
// migrate-sync.js
// Этот скрипт создает записи о миграциях в таблице pgmigrations без применения изменений
// Используется для синхронизации существующей базы с миграциями
const { Client } = require('pg');
const fs = require('fs');
const path = require('path');
// Подключение к базе данных
const client = new Client({
host: '192.168.0.102',
port: 5432,
database: 'telegram_tinder_bot',
user: 'trevor',
password: 'Cl0ud_1985!'
});
async function syncMigrations() {
try {
console.log('Подключение к базе данных...');
await client.connect();
// Создаем таблицу миграций, если её нет
await client.query(`
CREATE TABLE IF NOT EXISTS pgmigrations (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
run_on TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
)
`);
// Получаем список файлов миграций
const migrationsDir = path.join(__dirname, '../migrations');
const files = fs.readdirSync(migrationsDir)
.filter(file => file.endsWith('.js'))
.sort();
// Проверяем, какие миграции уже записаны
const { rows: existingMigrations } = await client.query('SELECT name FROM pgmigrations');
const existingNames = existingMigrations.map(m => m.name);
// Записываем новые миграции
for (const file of files) {
const migrationName = file.replace('.js', '');
if (!existingNames.includes(migrationName)) {
console.log(`Добавление записи о миграции: ${migrationName}`);
await client.query('INSERT INTO pgmigrations(name) VALUES($1)', [migrationName]);
} else {
console.log(`Миграция ${migrationName} уже записана`);
}
}
console.log('✅ Синхронизация миграций завершена успешно');
await client.end();
} catch (error) {
console.error('❌ Ошибка при синхронизации миграций:', error);
await client.end();
process.exit(1);
}
}
syncMigrations();