const mongoose = require('mongoose'); const trackSchema = new mongoose.Schema({ title: { type: String, required: true, trim: true, index: true }, artist: { type: mongoose.Schema.Types.ObjectId, ref: 'Artist', required: true, index: true }, album: { type: mongoose.Schema.Types.ObjectId, ref: 'Album', default: null, index: true }, // URL файла (хранится в MinIO или локально) fileUrl: { type: String, required: true }, // Метаданные файла file: { size: { type: Number, required: true }, // в байтах mimeType: { type: String, required: true }, duration: { type: Number, default: 0 } // в секундах }, // Обложка трека (если отличается от обложки альбома) coverImage: { type: String, default: null }, // Порядковый номер в альбоме trackNumber: { type: Number, default: 0 }, // Метаданные year: { type: Number, default: null }, genre: { type: String, default: '' }, // Статистика stats: { plays: { type: Number, default: 0 }, favorites: { type: Number, default: 0 }, downloads: { type: Number, default: 0 } }, // Кто добавил трек addedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true } }, { timestamps: true }); // Индексы для поиска trackSchema.index({ title: 'text' }); trackSchema.index({ artist: 1, createdAt: -1 }); trackSchema.index({ album: 1, trackNumber: 1 }); trackSchema.index({ createdAt: -1 }); trackSchema.index({ 'stats.plays': -1 }); module.exports = mongoose.model('Track', trackSchema);