2025-12-15 20:37:41 +00:00
|
|
|
|
/**
|
|
|
|
|
|
* Скрипт для удаления всех альбомов и треков из базы данных
|
|
|
|
|
|
*
|
|
|
|
|
|
* ВНИМАНИЕ: Этот скрипт безвозвратно удалит:
|
|
|
|
|
|
* - Все треки (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');
|
|
|
|
|
|
|
2025-12-15 21:04:26 +00:00
|
|
|
|
// Используем напрямую из переменных окружения, как в других скриптах
|
|
|
|
|
|
const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/nakama';
|
2025-12-15 20:37:41 +00:00
|
|
|
|
|
|
|
|
|
|
async function deleteAllMusic() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
console.log('🔌 Подключение к MongoDB...');
|
2025-12-15 21:04:26 +00:00
|
|
|
|
console.log(' URI:', mongoUri.replace(/\/\/.*@/, '//***@')); // Скрываем пароль
|
|
|
|
|
|
|
|
|
|
|
|
await mongoose.connect(mongoUri);
|
|
|
|
|
|
console.log('✅ Подключено к MongoDB');
|
|
|
|
|
|
console.log(' База данных:', mongoose.connection.db.databaseName);
|
|
|
|
|
|
console.log('');
|
2025-12-15 20:37:41 +00:00
|
|
|
|
|
|
|
|
|
|
// Подсчет перед удалением
|
|
|
|
|
|
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();
|
2025-12-15 21:04:26 +00:00
|
|
|
|
process.exit(0);
|
2025-12-15 20:37:41 +00:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log('🗑️ Начало удаления...\n');
|
|
|
|
|
|
|
|
|
|
|
|
// 1. Удалить все избранные треки
|
|
|
|
|
|
console.log('1️⃣ Удаление избранных треков...');
|
|
|
|
|
|
const favoritesResult = await FavoriteTrack.deleteMany({});
|
|
|
|
|
|
console.log(` ✅ Удалено избранных треков: ${favoritesResult.deletedCount}`);
|
|
|
|
|
|
|
|
|
|
|
|
// 2. Обнулить attachedTrack во всех постах
|
|
|
|
|
|
console.log('\n2️⃣ Обнуление прикрепленных треков в постах...');
|
2025-12-15 21:04:26 +00:00
|
|
|
|
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(' ℹ️ Посты с прикрепленными треками не найдены');
|
|
|
|
|
|
}
|
2025-12-15 20:37:41 +00:00
|
|
|
|
|
|
|
|
|
|
// 3. Удалить все треки
|
|
|
|
|
|
console.log('\n3️⃣ Удаление треков...');
|
2025-12-15 21:04:26 +00:00
|
|
|
|
|
|
|
|
|
|
// Проверить сколько треков найдено
|
|
|
|
|
|
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(' ℹ️ Треки не найдены');
|
|
|
|
|
|
}
|
2025-12-15 20:37:41 +00:00
|
|
|
|
|
|
|
|
|
|
// 4. Удалить все альбомы
|
|
|
|
|
|
console.log('\n4️⃣ Удаление альбомов...');
|
2025-12-15 21:04:26 +00:00
|
|
|
|
|
|
|
|
|
|
// Проверить сколько альбомов найдено
|
|
|
|
|
|
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(' ℹ️ Альбомы не найдены');
|
|
|
|
|
|
}
|
2025-12-15 20:37:41 +00:00
|
|
|
|
|
|
|
|
|
|
// Финальная статистика
|
|
|
|
|
|
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) {
|
2025-12-15 21:04:26 +00:00
|
|
|
|
console.error('\n❌ Ошибка при удалении:');
|
|
|
|
|
|
console.error(' Сообщение:', error.message);
|
|
|
|
|
|
console.error(' Стек:', error.stack);
|
|
|
|
|
|
if (error.name === 'MongoServerError') {
|
|
|
|
|
|
console.error(' Код ошибки:', error.code);
|
|
|
|
|
|
}
|
2025-12-15 20:37:41 +00:00
|
|
|
|
process.exit(1);
|
|
|
|
|
|
} finally {
|
2025-12-15 21:04:26 +00:00
|
|
|
|
if (mongoose.connection.readyState === 1) {
|
|
|
|
|
|
await mongoose.disconnect();
|
|
|
|
|
|
console.log('\n🔌 Отключено от MongoDB');
|
|
|
|
|
|
}
|
2025-12-15 20:37:41 +00:00
|
|
|
|
process.exit(0);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Запуск скрипта
|
|
|
|
|
|
deleteAllMusic();
|
|
|
|
|
|
|