From 78d0ec0e30aed4636eb7b90678cb4cda246204bd Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Mon, 10 Feb 2025 22:27:56 +0000 Subject: [PATCH] fix 500 when no metadata provided --- .../music/classes/track/methods/create.js | 176 +++++++++--------- 1 file changed, 89 insertions(+), 87 deletions(-) diff --git a/packages/server/services/music/classes/track/methods/create.js b/packages/server/services/music/classes/track/methods/create.js index 6ee08e1d..2faca6aa 100644 --- a/packages/server/services/music/classes/track/methods/create.js +++ b/packages/server/services/music/classes/track/methods/create.js @@ -6,113 +6,115 @@ import axios from "axios" import ModifyTrack from "./modify" export default async (payload = {}) => { - requiredFields(["title", "source", "user_id"], payload) + requiredFields(["title", "source", "user_id"], payload) - let stream = null - let headers = null + let stream = null + let headers = null - if (typeof payload._id === "string") { - return await ModifyTrack(payload._id, payload) - } + if (typeof payload._id === "string") { + return await ModifyTrack(payload._id, payload) + } - let metadata = Object() + let metadata = Object() - try { - const sourceStream = await axios({ - url: payload.source, - method: "GET", - responseType: "stream", - }) + try { + const sourceStream = await axios({ + url: payload.source, + method: "GET", + responseType: "stream", + }) - stream = sourceStream.data - headers = sourceStream.headers + stream = sourceStream.data + headers = sourceStream.headers - const streamMetadata = await MusicMetadata.parseStream(stream, { - mimeType: headers["content-type"], - }) + const streamMetadata = await MusicMetadata.parseStream(stream, { + mimeType: headers["content-type"], + }) - metadata = { - ...metadata, - format: streamMetadata.format.codec, - channels: streamMetadata.format.numberOfChannels, - sampleRate: streamMetadata.format.sampleRate, - bits: streamMetadata.format.bitsPerSample, - lossless: streamMetadata.format.lossless, - duration: streamMetadata.format.duration, + metadata = { + ...metadata, + format: streamMetadata.format.codec, + channels: streamMetadata.format.numberOfChannels, + sampleRate: streamMetadata.format.sampleRate, + bits: streamMetadata.format.bitsPerSample, + lossless: streamMetadata.format.lossless, + duration: streamMetadata.format.duration, - title: streamMetadata.common.title, - artists: streamMetadata.common.artists, - album: streamMetadata.common.album, - } - } catch (error) { - // sowy :( - } + title: streamMetadata.common.title, + artists: streamMetadata.common.artists, + album: streamMetadata.common.album, + } + } catch (error) { + // sowy :( + } - if (typeof payload.metadata === "object") { - metadata = { - ...metadata, - ...payload.metadata, - } - } + if (typeof payload.metadata === "object") { + metadata = { + ...metadata, + ...payload.metadata, + } + } - metadata.format = metadata.format.toUpperCase() + if (metadata.format) { + metadata.format = metadata.format.toUpperCase() + } - if ( - metadata.format === "FLAC" || - metadata.format === "WAV" || - metadata.format === "ALAC" - ) { - metadata.lossless = true - } + if ( + metadata.format === "FLAC" || + metadata.format === "WAV" || + metadata.format === "ALAC" + ) { + metadata.lossless = true + } - const obj = { - title: payload.title, - album: payload.album, - cover: payload.cover, - artists: [], - source: payload.source, - metadata: metadata, - lyrics_enabled: payload.lyrics_enabled, - } + const obj = { + title: payload.title, + album: payload.album, + cover: payload.cover, + artists: [], + source: payload.source, + metadata: metadata, + lyrics_enabled: payload.lyrics_enabled, + } - if (Array.isArray(payload.artists)) { - obj.artists = payload.artists - } + if (Array.isArray(payload.artists)) { + obj.artists = payload.artists + } - if (typeof payload.artists === "string") { - obj.artists.push(payload.artists) - } + if (typeof payload.artists === "string") { + obj.artists.push(payload.artists) + } - if (typeof payload.artist === "string") { - obj.artists.push(payload.artist) - } + if (typeof payload.artist === "string") { + obj.artists.push(payload.artist) + } - if (obj.artists.length === 0 || !obj.artists) { - obj.artists = metadata.artists - } + if (obj.artists.length === 0 || !obj.artists) { + obj.artists = metadata.artists + } - let track = null + let track = null - if (payload._id) { - track = await Track.findById(payload._id) + if (payload._id) { + track = await Track.findById(payload._id) - if (!track) { - throw new OperationError(404, "Track not found, cannot update") - } + if (!track) { + throw new OperationError(404, "Track not found, cannot update") + } - throw new OperationError(501, "Not implemented") - } else { - track = new Track({ - ...obj, - publisher: { - user_id: payload.user_id, - } - }) + throw new OperationError(501, "Not implemented") + } else { + track = new Track({ + ...obj, + publisher: { + user_id: payload.user_id, + }, + }) - await track.save() - } + await track.save() + } - track = track.toObject() + track = track.toObject() - return track -} \ No newline at end of file + return track +}