| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | import async from "async";/** * Migration 2 * * Updates the document version 1 stations to add the includedPlaylists and excludedPlaylists properties, and to create a station playlist and link that playlist with the playlist2 property. * * @param {object} MigrationModule - the MigrationModule * @returns {Promise} - returns promise */export default async function migrate(MigrationModule) {	const stationModel = await MigrationModule.runJob("GET_MODEL", { modelName: "station" }, this);	const playlistModel = await MigrationModule.runJob("GET_MODEL", { modelName: "playlist" }, this);	return new Promise((resolve, reject) => {		async.waterfall(			[				next => {					this.log("INFO", `Migration 2. Finding stations with document version 1.`);					stationModel.find({ documentVersion: 1 }, (err, stations) => {						this.log("INFO", `Migration 2. Found ${stations.length} stations with document version 1.`);						next(							null,							stations.map(station => station._doc)						);					});				},				(stations, next) => {					async.eachLimit(						stations,						1,						(station, next) => {							this.log("INFO", `Migration 2. Creating station playlist for station ${station._id}.`);							playlistModel.create(								{									isUserModifiable: false,									displayName: `Station - ${station.displayName}`,									songs: [],									createdBy: station.type === "official" ? "Musare" : station.createdBy,									createdFor: `${station._id}`,									createdAt: Date.now(),									type: "station",									documentVersion: 1								},								(err, playlist2) => {									if (err) next(err);									else {										this.log("INFO", `Migration 2. Updating station ${station._id}.`);										stationModel.updateOne(											{ _id: station._id },											{												$set: {													playlist2: playlist2._id,													includedPlaylists: [],													excludedPlaylists: [],													playlist: station.type === "official" ? [] : station.playlist,													genres: [],													documentVersion: 2												}											},											(err, res) => {												if (err) next(err);												else {													this.log(														"INFO",														`Migration 2. Updating station ${station._id} done. Matched: ${res.n}, modified: ${res.nModified}, ok: ${res.ok}.`													);												}											}										);										next();									}								}							);						},						next					);				}			],			(err, response) => {				if (err) {					reject(new Error(err));				} else {					resolve(response);				}			}		);	});}
 |