/** * Скрипт для удаления всех альбомов и треков из базы данных * * ВНИМАНИЕ: Этот скрипт безвозвратно удалит: * - Все треки (Tracks) * - Все альбомы (Albums) * - Все избранные треки (FavoriteTrack) * - Все ссылки на треки в постах (attachedTrack будет установлен в null) * * Использование: * node backend/scripts/deleteAllMusic.js */ require('dotenv').config({ path: require('path').join(__dirname, '../.env') }); const mongoose = require('mongoose'); const Track = require('../models/Track'); const Album = require('../models/Album'); const FavoriteTrack = require('../models/FavoriteTrack'); const Post = require('../models/Post'); // Используем напрямую из переменных окружения, как в других скриптах const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/nakama'; async function deleteAllMusic() { try { console.log('🔌 Подключение к MongoDB...'); console.log(' URI:', mongoUri.replace(/\/\/.*@/, '//***@')); // Скрываем пароль await mongoose.connect(mongoUri); console.log('✅ Подключено к MongoDB'); console.log(' База данных:', mongoose.connection.db.databaseName); console.log(''); // Подсчет перед удалением const tracksCount = await Track.countDocuments(); const albumsCount = await Album.countDocuments(); const favoritesCount = await FavoriteTrack.countDocuments(); const postsWithTracksCount = await Post.countDocuments({ attachedTrack: { $ne: null } }); console.log('📊 Текущая статистика:'); console.log(` - Треков: ${tracksCount}`); console.log(` - Альбомов: ${albumsCount}`); console.log(` - Избранных треков: ${favoritesCount}`); console.log(` - Постов с прикрепленными треками: ${postsWithTracksCount}\n`); if (tracksCount === 0 && albumsCount === 0) { console.log('✅ В базе данных нет треков и альбомов для удаления'); await mongoose.disconnect(); process.exit(0); return; } console.log('🗑️ Начало удаления...\n'); // 1. Удалить все избранные треки console.log('1️⃣ Удаление избранных треков...'); const favoritesResult = await FavoriteTrack.deleteMany({}); console.log(` ✅ Удалено избранных треков: ${favoritesResult.deletedCount}`); // 2. Обнулить attachedTrack во всех постах console.log('\n2️⃣ Обнуление прикрепленных треков в постах...'); const postsWithTracksBefore = await Post.countDocuments({ attachedTrack: { $ne: null } }); console.log(` Найдено постов с прикрепленными треками: ${postsWithTracksBefore}`); if (postsWithTracksBefore > 0) { const postsResult = await Post.updateMany( { attachedTrack: { $ne: null } }, { $set: { attachedTrack: null } } ); console.log(` ✅ Обновлено постов: ${postsResult.modifiedCount}`); } else { console.log(' ℹ️ Посты с прикрепленными треками не найдены'); } // 3. Удалить все треки console.log('\n3️⃣ Удаление треков...'); // Проверить сколько треков найдено const tracksBeforeDelete = await Track.countDocuments(); console.log(` Найдено треков для удаления: ${tracksBeforeDelete}`); if (tracksBeforeDelete > 0) { const tracksResult = await Track.deleteMany({}); console.log(` ✅ Удалено треков: ${tracksResult.deletedCount}`); if (tracksResult.deletedCount !== tracksBeforeDelete) { console.warn(` ⚠️ Предупреждение: количество удаленных (${tracksResult.deletedCount}) не совпадает с найденными (${tracksBeforeDelete})`); } } else { console.log(' ℹ️ Треки не найдены'); } // 4. Удалить все альбомы console.log('\n4️⃣ Удаление альбомов...'); // Проверить сколько альбомов найдено const albumsBeforeDelete = await Album.countDocuments(); console.log(` Найдено альбомов для удаления: ${albumsBeforeDelete}`); if (albumsBeforeDelete > 0) { const albumsResult = await Album.deleteMany({}); console.log(` ✅ Удалено альбомов: ${albumsResult.deletedCount}`); if (albumsResult.deletedCount !== albumsBeforeDelete) { console.warn(` ⚠️ Предупреждение: количество удаленных (${albumsResult.deletedCount}) не совпадает с найденными (${albumsBeforeDelete})`); } } else { console.log(' ℹ️ Альбомы не найдены'); } // Финальная статистика console.log('\n📊 Финальная статистика:'); const finalTracksCount = await Track.countDocuments(); const finalAlbumsCount = await Album.countDocuments(); const finalFavoritesCount = await FavoriteTrack.countDocuments(); const finalPostsWithTracksCount = await Post.countDocuments({ attachedTrack: { $ne: null } }); console.log(` - Треков: ${finalTracksCount}`); console.log(` - Альбомов: ${finalAlbumsCount}`); console.log(` - Избранных треков: ${finalFavoritesCount}`); console.log(` - Постов с прикрепленными треками: ${finalPostsWithTracksCount}`); console.log('\n✅ Все альбомы и треки успешно удалены!'); } catch (error) { console.error('\n❌ Ошибка при удалении:'); console.error(' Сообщение:', error.message); console.error(' Стек:', error.stack); if (error.name === 'MongoServerError') { console.error(' Код ошибки:', error.code); } process.exit(1); } finally { if (mongoose.connection.readyState === 1) { await mongoose.disconnect(); console.log('\n🔌 Отключено от MongoDB'); } process.exit(0); } } // Запуск скрипта deleteAllMusic();