|
|
|
@ -297,13 +297,19 @@ export const QueryEndpointHandler: EndpointHandler = async (req: any, res: any, |
|
|
|
|
return await getLinkedObjects(knex, ObjectType.Song, ObjectType.Tag, await songIdsPromise); |
|
|
|
|
})() : |
|
|
|
|
(async () => { return {}; })(); |
|
|
|
|
const songsAlbumsPromise: Promise<Record<number, any[]>> = (songLimit && songLimit > 0) ? |
|
|
|
|
(async () => { |
|
|
|
|
return await getLinkedObjects(knex, ObjectType.Song, ObjectType.Album, await songIdsPromise); |
|
|
|
|
})() : |
|
|
|
|
(async () => { return {}; })(); |
|
|
|
|
|
|
|
|
|
const [ |
|
|
|
|
songs, |
|
|
|
|
artists, |
|
|
|
|
tags, |
|
|
|
|
songsArtists, |
|
|
|
|
songsTags |
|
|
|
|
songsTags, |
|
|
|
|
songsAlbums, |
|
|
|
|
] = |
|
|
|
|
await Promise.all([ |
|
|
|
|
songsPromise, |
|
|
|
@ -311,6 +317,7 @@ export const QueryEndpointHandler: EndpointHandler = async (req: any, res: any, |
|
|
|
|
tagsPromise, |
|
|
|
|
songsArtistsPromise, |
|
|
|
|
songsTagsPromise, |
|
|
|
|
songsAlbumsPromise, |
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
const response: api.QueryResponse = { |
|
|
|
@ -332,7 +339,13 @@ export const QueryEndpointHandler: EndpointHandler = async (req: any, res: any, |
|
|
|
|
name: tag['tags.name'], |
|
|
|
|
}; |
|
|
|
|
}), |
|
|
|
|
albums: [], //FIXME
|
|
|
|
|
albums: songsAlbums[song['songs.id']].map((album: any) => { |
|
|
|
|
return <api.AlbumDetails>{ |
|
|
|
|
albumId: album['albums.id'], |
|
|
|
|
name: album['albums.name'], |
|
|
|
|
storeLinks: asJson(album['albums.storeLinks']), |
|
|
|
|
}; |
|
|
|
|
}), |
|
|
|
|
} |
|
|
|
|
}), |
|
|
|
|
artists: artists.map((artist: any) => { |
|
|
|
@ -355,94 +368,4 @@ export const QueryEndpointHandler: EndpointHandler = async (req: any, res: any, |
|
|
|
|
} catch (e) { |
|
|
|
|
catchUnhandledErrors(e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// try {
|
|
|
|
|
// const songLimit = reqObject.offsetsLimits.songLimit;
|
|
|
|
|
// const songOffset = reqObject.offsetsLimits.songOffset;
|
|
|
|
|
// const tagLimit = reqObject.offsetsLimits.tagLimit;
|
|
|
|
|
// const tagOffset = reqObject.offsetsLimits.tagOffset;
|
|
|
|
|
// const artistLimit = reqObject.offsetsLimits.artistLimit;
|
|
|
|
|
// const artistOffset = reqObject.offsetsLimits.artistOffset;
|
|
|
|
|
|
|
|
|
|
// const songs = (songLimit && songLimit > 0) && await models.Song.findAll({
|
|
|
|
|
// // NOTE: have to disable limit and offset because of bug: https://github.com/sequelize/sequelize/issues/11938.
|
|
|
|
|
// // Custom pagination is implemented before responding.
|
|
|
|
|
// where: getSequelizeWhere(reqObject.query, QueryType.Song),
|
|
|
|
|
// order: getSequelizeOrder(reqObject.ordering, QueryType.Song),
|
|
|
|
|
// include: [ models.Artist, models.Album, models.Tag, models.Ranking ],
|
|
|
|
|
// //limit: reqObject.limit,
|
|
|
|
|
// //offset: reqObject.offset,
|
|
|
|
|
// })
|
|
|
|
|
// const artists = (artistLimit && artistLimit > 0) && await models.Artist.findAll({
|
|
|
|
|
// // NOTE: have to disable limit and offset because of bug: https://github.com/sequelize/sequelize/issues/11938.
|
|
|
|
|
// // Custom pagination is implemented before responding.
|
|
|
|
|
// where: getSequelizeWhere(reqObject.query, QueryType.Artist),
|
|
|
|
|
// order: getSequelizeOrder(reqObject.ordering, QueryType.Artist),
|
|
|
|
|
// include: [models.Song, models.Album, models.Tag],
|
|
|
|
|
// //limit: reqObject.limit,
|
|
|
|
|
// //offset: reqObject.offset,
|
|
|
|
|
// })
|
|
|
|
|
// const tags = (tagLimit && tagLimit > 0) && await models.Tag.findAll({
|
|
|
|
|
// // NOTE: have to disable limit and offset because of bug: https://github.com/sequelize/sequelize/issues/11938.
|
|
|
|
|
// // Custom pagination is implemented before responding.
|
|
|
|
|
// where: getSequelizeWhere(reqObject.query, QueryType.Tag),
|
|
|
|
|
// order: getSequelizeOrder(reqObject.ordering, QueryType.Tag),
|
|
|
|
|
// include: [models.Song, models.Album, models.Artist],
|
|
|
|
|
// //limit: reqObject.limit,
|
|
|
|
|
// //offset: reqObject.offset,
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|
// const response: api.QueryResponse = {
|
|
|
|
|
// songs: ((songLimit || -1) <= 0) ? [] : await Promise.all(songs.map(async (song: any) => {
|
|
|
|
|
// const artists = song.getArtists();
|
|
|
|
|
// const tags = song.getTags();
|
|
|
|
|
// const rankings = song.getRankings();
|
|
|
|
|
// return <api.SongDetails>{
|
|
|
|
|
// songId: song.id,
|
|
|
|
|
// title: song.title,
|
|
|
|
|
// storeLinks: song.storeLinks,
|
|
|
|
|
// artists: (await artists).map((artist: any) => {
|
|
|
|
|
// return <api.ArtistDetails>{
|
|
|
|
|
// artistId: artist.id,
|
|
|
|
|
// name: artist.name,
|
|
|
|
|
// }
|
|
|
|
|
// }),
|
|
|
|
|
// tags: (await tags).map((tag: any) => {
|
|
|
|
|
// return <api.TagDetails>{
|
|
|
|
|
// tagId: tag.id,
|
|
|
|
|
// name: tag.name,
|
|
|
|
|
// }
|
|
|
|
|
// }),
|
|
|
|
|
// rankings: await (await rankings).map(async (ranking: any) => {
|
|
|
|
|
// const maybeTagContext: api.TagDetails | undefined = await ranking.getTagContext();
|
|
|
|
|
// const maybeArtistContext: api.ArtistDetails | undefined = await ranking.getArtistContext();
|
|
|
|
|
// const maybeContext = maybeTagContext || maybeArtistContext;
|
|
|
|
|
// return <api.RankingDetails>{
|
|
|
|
|
// rankingId: ranking.id,
|
|
|
|
|
// type: api.ItemType.Song,
|
|
|
|
|
// rankedId: song.id,
|
|
|
|
|
// context: maybeContext,
|
|
|
|
|
// value: ranking.value,
|
|
|
|
|
// }
|
|
|
|
|
// })
|
|
|
|
|
// };
|
|
|
|
|
// }).slice(songOffset || 0, (songOffset || 0) + (songLimit || 10))),
|
|
|
|
|
// // TODO: custom pagination due to bug mentioned above
|
|
|
|
|
// artists: ((artistLimit || -1) <= 0) ? [] : await Promise.all(artists.map(async (artist: any) => {
|
|
|
|
|
// return <api.ArtistDetails>{
|
|
|
|
|
// artistId: artist.id,
|
|
|
|
|
// name: artist.name,
|
|
|
|
|
// };
|
|
|
|
|
// }).slice(artistOffset || 0, (artistOffset || 0) + (artistLimit || 10))),
|
|
|
|
|
// tags: ((tagLimit || -1) <= 0) ? [] : await Promise.all(tags.map(async (tag: any) => {
|
|
|
|
|
// return <api.TagDetails>{
|
|
|
|
|
// tagId: tag.id,
|
|
|
|
|
// name: tag.name,
|
|
|
|
|
// };
|
|
|
|
|
// }).slice(tagOffset || 0, (tagOffset || 0) + (tagLimit || 10))),
|
|
|
|
|
// };
|
|
|
|
|
// res.send(response);
|
|
|
|
|
// } catch (e) {
|
|
|
|
|
// catchUnhandledErrors(e);
|
|
|
|
|
// }
|
|
|
|
|
} |