comty/packages/server/scripts/migrations/userTrackLikesToLibraryItems.js
SrGooglo 8482f2e457 Feat: Implement Music Library and overhaul Studio TV
- Introduces a new Music Library system for managing favorites (tracks,
  playlists, releases), replacing the previous TrackLike model.
- Completely revamps the Studio TV profile page, adding live statistics,
  stream configuration, restream management, and media URL display.
- Enhances the media player with a custom seekbar and improved audio
  playback logic for MPD and non-MPD sources.
- Lays foundational groundwork for chat encryption with new models and APIs.
- Refactors critical UI components like PlaylistView and PagePanel.
- Standardizes monorepo development scripts to use npm.
- Updates comty.js submodule and adds various new UI components.
2025-05-10 02:32:41 +00:00

54 lines
1.2 KiB
JavaScript

import DbManager from "@shared-classes/DbManager"
import { TrackLike, MusicLibraryItem } from "@db_models"
async function main() {
await global.injectEnvFromInfisical()
const db = new DbManager()
await db.initialize()
if (!TrackLike) {
console.log("TrackLike model not found, skipping migration.")
return null
}
if (!MusicLibraryItem) {
console.log("MusicLibraryItem model not found, skipping migration.")
return null
}
// find all liked tracks
const likedTracks = await TrackLike.find()
const totalLikedTracks = await TrackLike.countDocuments()
for await (const likedTrack of likedTracks) {
// first check if already exist a library item for this track like
let libraryItem = await MusicLibraryItem.findOne({
user_id: likedTrack.user_id,
item_id: likedTrack.track_id,
kind: "tracks",
})
if (!libraryItem) {
console.log(
`Migrating [${likedTrack._id.toString()}] track like to library item...`,
)
// if not exist, create a new one
libraryItem = new MusicLibraryItem({
user_id: likedTrack.user_id,
item_id: likedTrack.track_id,
kind: "tracks",
created_at: likedTrack.created_at ?? new Date(),
})
await libraryItem.save()
}
}
console.log({
totalLikedTracks,
})
}
main()