Files
DLE/backend/services/userDeleteService.js
2025-10-09 16:48:20 +03:00

115 lines
5.0 KiB
JavaScript

/**
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
* All rights reserved.
*
* This software is proprietary and confidential.
* Unauthorized copying, modification, or distribution is prohibited.
*
* For licensing inquiries: info@hb3-accelerator.com
* Website: https://hb3-accelerator.com
* GitHub: https://github.com/HB3-ACCELERATOR
*/
const db = require('../db');
async function deleteUserById(userId) {
console.log('[DELETE] Вызван deleteUserById для userId:', userId);
try {
// Удаляем в правильном порядке (сначала зависимые таблицы, потом основную)
// 1. Удаляем user_identities
console.log('[DELETE] Начинаем удаление user_identities для userId:', userId);
const resIdentities = await db.getQuery()(
'DELETE FROM user_identities WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено user_identities:', resIdentities.rows.length);
// 2. Удаляем messages
console.log('[DELETE] Начинаем удаление messages для userId:', userId);
const resMessages = await db.getQuery()(
'DELETE FROM messages WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено messages:', resMessages.rows.length);
// 2.1. Удаляем хеши дедупликации
console.log('[DELETE] Начинаем удаление message_deduplication для userId:', userId);
const resDeduplication = await db.getQuery()(
'DELETE FROM message_deduplication WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено deduplication hashes:', resDeduplication.rows.length);
// 3. Удаляем conversations
console.log('[DELETE] Начинаем удаление conversations для userId:', userId);
const resConversations = await db.getQuery()(
'DELETE FROM conversations WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено conversations:', resConversations.rows.length);
// 4. Удаляем conversation_participants
console.log('[DELETE] Начинаем удаление conversation_participants для userId:', userId);
const resParticipants = await db.getQuery()(
'DELETE FROM conversation_participants WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено conversation_participants:', resParticipants.rows.length);
// 5. Удаляем user_preferences
console.log('[DELETE] Начинаем удаление user_preferences для userId:', userId);
const resPreferences = await db.getQuery()(
'DELETE FROM user_preferences WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено user_preferences:', resPreferences.rows.length);
// 6. Удаляем verification_codes
console.log('[DELETE] Начинаем удаление verification_codes для userId:', userId);
const resCodes = await db.getQuery()(
'DELETE FROM verification_codes WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено verification_codes:', resCodes.rows.length);
// 7. Удаляем unified_guest_mapping
console.log('[DELETE] Начинаем удаление unified_guest_mapping для userId:', userId);
const resGuestMapping = await db.getQuery()(
'DELETE FROM unified_guest_mapping WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено unified_guest_mapping:', resGuestMapping.rows.length);
// 8. Удаляем user_tag_links
console.log('[DELETE] Начинаем удаление user_tag_links для userId:', userId);
const resTagLinks = await db.getQuery()(
'DELETE FROM user_tag_links WHERE user_id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Удалено user_tag_links:', resTagLinks.rows.length);
// 9. Удаляем global_read_status
console.log('[DELETE] Начинаем удаление global_read_status для userId:', userId);
const resReadStatus = await db.getQuery()(
'DELETE FROM global_read_status WHERE user_id = $1 RETURNING user_id',
[userId]
);
console.log('[DELETE] Удалено global_read_status:', resReadStatus.rows.length);
// 10. Удаляем самого пользователя
console.log('[DELETE] Начинаем удаление пользователя из users:', userId);
const result = await db.getQuery()(
'DELETE FROM users WHERE id = $1 RETURNING id',
[userId]
);
console.log('[DELETE] Результат удаления пользователя:', result.rows.length, result.rows);
return result.rows.length;
} catch (e) {
console.error('[DELETE] Ошибка при удалении пользователя:', e);
throw e;
}
}
module.exports = { deleteUserById };