From db7b7243563292d7fb64757ccdf4de7cd74ba3dc Mon Sep 17 00:00:00 2001 From: Mitch Downey Date: Tue, 21 Nov 2023 18:41:52 -0600 Subject: [PATCH 1/4] Fix userHistoryItem orderBy --- src/controllers/userHistoryItem.ts | 163 ++++++++++++++--------------- 1 file changed, 80 insertions(+), 83 deletions(-) diff --git a/src/controllers/userHistoryItem.ts b/src/controllers/userHistoryItem.ts index d3da5dfe..51671aba 100644 --- a/src/controllers/userHistoryItem.ts +++ b/src/controllers/userHistoryItem.ts @@ -193,7 +193,7 @@ export const cleanUserItemResults = (results) => { export const generateGetUserItemsQuery = (table, tableName, loggedInUserId, skip, take, useGetMany: boolean) => { const orderByParam1 = tableName === 'userHistoryItem' ? `${tableName}.orderChangedDate` : `${tableName}.queuePosition` - const orderByParam2 = tableName === 'userQueueItem' ? 'DESC' : 'ASC' + const orderByParam2 = tableName === 'userHistoryItem' ? 'DESC' : 'ASC' if (useGetMany) { return getRepository(table) @@ -226,87 +226,85 @@ export const generateGetUserItemsQuery = (table, tableName, loggedInUserId, skip qb.addSelect(`${tableName}.queuePosition`, 'queuePosition') } - return ( - qb - .addSelect('mediaRef.id', 'clipId') - .addSelect('mediaRef.title', 'clipTitle') - .addSelect('mediaRef.startTime', 'clipStartTime') - .addSelect('mediaRef.endTime', 'clipEndTime') - .addSelect('episode.id', 'episodeId') - .addSelect('episode.alternateEnclosures', 'episodeAlternateEnclosures') - .addSelect('episode.chaptersUrl', 'episodeChaptersUrl') - .addSelect('episode.contentLinks', 'episodeContentLinks') - .addSelect('episode.description', 'episodeDescription') - .addSelect('episode.duration', 'episodeDuration') - .addSelect('episode.funding', 'episodeFunding') - .addSelect('episode.guid', 'episodeGuid') - .addSelect('episode.imageUrl', 'episodeImageUrl') - .addSelect('episode.itunesEpisode', 'episodeItunesEpisode') - .addSelect('episode.itunesEpisodeType', 'episodeItunesEpisodeType') - .addSelect('episode.itunesSeason', 'episodeItunesSeason') - .addSelect('episode.mediaType', 'episodeMediaType') - .addSelect('episode.mediaUrl', 'episodeMediaUrl') - .addSelect('episode.pubDate', 'episodePubDate') - .addSelect('episode.socialInteraction', 'episodeSocialInteraction') - .addSelect('episode.subtitle', 'episodeSubtitle') - .addSelect('episode.title', 'episodeTitle') - .addSelect('episode.transcript', 'episodeTranscript') - .addSelect('episode.value', 'episodeValue') - .addSelect('podcast.funding', 'podcastFunding') - .addSelect('podcast.hasSeasons', 'podcastHasSeasons') - .addSelect('podcast.id', 'podcastId') - .addSelect('podcast.imageUrl', 'podcastImageUrl') - .addSelect('podcast.podcastIndexId', 'podcastPodcastIndexId') - .addSelect('podcast.podcastGuid', 'podcastGuid') - .addSelect('podcast.itunesFeedType', 'podcastItunesFeedType') - .addSelect('podcast.medium', 'podcastMedium') - .addSelect('podcast.shrunkImageUrl', 'podcastShrunkImageUrl') - .addSelect('podcast.title', 'podcastTitle') - .addSelect('podcast.value', 'podcastValue') - .addSelect('clipEpisode.id', 'clipEpisodeId') - .addSelect('clipEpisode.alternateEnclosures', 'clipEpisodeAlternateEnclosures') - .addSelect('clipEpisode.chaptersUrl', 'clipEpisodeChaptersUrl') - .addSelect('clipEpisode.contentLinks', 'clipEpisodeContentLinks') - .addSelect('clipEpisode.description', 'clipEpisodeDescription') - .addSelect('clipEpisode.duration', 'clipEpisodeDuration') - .addSelect('clipEpisode.funding', 'clipEpisodeFunding') - .addSelect('clipEpisode.guid', 'clipEpisodeGuid') - .addSelect('clipEpisode.imageUrl', 'clipEpisodeImageUrl') - .addSelect('clipEpisode.itunesEpisode', 'clipEpisodeItunesEpisode') - .addSelect('clipEpisode.itunesEpisodeType', 'clipEpisodeItunesEpisodeType') - .addSelect('clipEpisode.itunesSeason', 'clipEpisodeItunesSeason') - .addSelect('clipEpisode.mediaType', 'clipEpisodeMediaType') - .addSelect('clipEpisode.mediaUrl', 'clipEpisodeMediaUrl') - .addSelect('clipEpisode.pubDate', 'clipEpisodePubDate') - .addSelect('clipEpisode.socialInteraction', 'clipEpisodeSocialInteraction') - .addSelect('clipEpisode.subtitle', 'clipEpisodeSubtitle') - .addSelect('clipEpisode.title', 'clipEpisodeTitle') - .addSelect('clipEpisode.transcript', 'clipEpisodeTranscript') - .addSelect('clipEpisode.value', 'clipEpisodeValue') - .addSelect('clipPodcast.id', 'clipPodcastId') - .addSelect('clipPodcast.funding', 'clipPodcastFunding') - .addSelect('clipPodcast.hasSeasons', 'clipPodcastHasSeasons') - .addSelect('clipPodcast.imageUrl', 'clipPodcastImageUrl') - .addSelect('clipPodcast.itunesFeedType', 'clipPodcastItunesFeedType') - .addSelect('clipPodcast.medium', 'clipPodcastMedium') - .addSelect('clipPodcast.podcastGuid', 'clipPodcastGuid') - .addSelect('clipPodcast.podcastIndexId', 'clipPodcastIndexId') - .addSelect('clipPodcast.shrunkImageUrl', 'clipPodcastShrunkImageUrl') - .addSelect('clipPodcast.title', 'clipPodcastTitle') - .addSelect('clipPodcast.value', 'clipPodcastValue') - .leftJoin(`${tableName}.episode`, 'episode') - .leftJoinAndSelect(`episode.liveItem`, 'liveItem') - .leftJoin('episode.podcast', 'podcast') - .leftJoin(`${tableName}.mediaRef`, 'mediaRef') - .leftJoin('mediaRef.episode', 'clipEpisode') - .leftJoin('clipEpisode.podcast', 'clipPodcast') - .leftJoin(`${tableName}.owner`, 'owner') - .where('owner.id = :loggedInUserId', { loggedInUserId }) - // .orderBy(orderByParam1, orderByParam2) - .offset(skip) - .limit(take) - .getRawMany() as any - ) + return qb + .addSelect('mediaRef.id', 'clipId') + .addSelect('mediaRef.title', 'clipTitle') + .addSelect('mediaRef.startTime', 'clipStartTime') + .addSelect('mediaRef.endTime', 'clipEndTime') + .addSelect('episode.id', 'episodeId') + .addSelect('episode.alternateEnclosures', 'episodeAlternateEnclosures') + .addSelect('episode.chaptersUrl', 'episodeChaptersUrl') + .addSelect('episode.contentLinks', 'episodeContentLinks') + .addSelect('episode.description', 'episodeDescription') + .addSelect('episode.duration', 'episodeDuration') + .addSelect('episode.funding', 'episodeFunding') + .addSelect('episode.guid', 'episodeGuid') + .addSelect('episode.imageUrl', 'episodeImageUrl') + .addSelect('episode.itunesEpisode', 'episodeItunesEpisode') + .addSelect('episode.itunesEpisodeType', 'episodeItunesEpisodeType') + .addSelect('episode.itunesSeason', 'episodeItunesSeason') + .addSelect('episode.mediaType', 'episodeMediaType') + .addSelect('episode.mediaUrl', 'episodeMediaUrl') + .addSelect('episode.pubDate', 'episodePubDate') + .addSelect('episode.socialInteraction', 'episodeSocialInteraction') + .addSelect('episode.subtitle', 'episodeSubtitle') + .addSelect('episode.title', 'episodeTitle') + .addSelect('episode.transcript', 'episodeTranscript') + .addSelect('episode.value', 'episodeValue') + .addSelect('podcast.funding', 'podcastFunding') + .addSelect('podcast.hasSeasons', 'podcastHasSeasons') + .addSelect('podcast.id', 'podcastId') + .addSelect('podcast.imageUrl', 'podcastImageUrl') + .addSelect('podcast.podcastIndexId', 'podcastPodcastIndexId') + .addSelect('podcast.podcastGuid', 'podcastGuid') + .addSelect('podcast.itunesFeedType', 'podcastItunesFeedType') + .addSelect('podcast.medium', 'podcastMedium') + .addSelect('podcast.shrunkImageUrl', 'podcastShrunkImageUrl') + .addSelect('podcast.title', 'podcastTitle') + .addSelect('podcast.value', 'podcastValue') + .addSelect('clipEpisode.id', 'clipEpisodeId') + .addSelect('clipEpisode.alternateEnclosures', 'clipEpisodeAlternateEnclosures') + .addSelect('clipEpisode.chaptersUrl', 'clipEpisodeChaptersUrl') + .addSelect('clipEpisode.contentLinks', 'clipEpisodeContentLinks') + .addSelect('clipEpisode.description', 'clipEpisodeDescription') + .addSelect('clipEpisode.duration', 'clipEpisodeDuration') + .addSelect('clipEpisode.funding', 'clipEpisodeFunding') + .addSelect('clipEpisode.guid', 'clipEpisodeGuid') + .addSelect('clipEpisode.imageUrl', 'clipEpisodeImageUrl') + .addSelect('clipEpisode.itunesEpisode', 'clipEpisodeItunesEpisode') + .addSelect('clipEpisode.itunesEpisodeType', 'clipEpisodeItunesEpisodeType') + .addSelect('clipEpisode.itunesSeason', 'clipEpisodeItunesSeason') + .addSelect('clipEpisode.mediaType', 'clipEpisodeMediaType') + .addSelect('clipEpisode.mediaUrl', 'clipEpisodeMediaUrl') + .addSelect('clipEpisode.pubDate', 'clipEpisodePubDate') + .addSelect('clipEpisode.socialInteraction', 'clipEpisodeSocialInteraction') + .addSelect('clipEpisode.subtitle', 'clipEpisodeSubtitle') + .addSelect('clipEpisode.title', 'clipEpisodeTitle') + .addSelect('clipEpisode.transcript', 'clipEpisodeTranscript') + .addSelect('clipEpisode.value', 'clipEpisodeValue') + .addSelect('clipPodcast.id', 'clipPodcastId') + .addSelect('clipPodcast.funding', 'clipPodcastFunding') + .addSelect('clipPodcast.hasSeasons', 'clipPodcastHasSeasons') + .addSelect('clipPodcast.imageUrl', 'clipPodcastImageUrl') + .addSelect('clipPodcast.itunesFeedType', 'clipPodcastItunesFeedType') + .addSelect('clipPodcast.medium', 'clipPodcastMedium') + .addSelect('clipPodcast.podcastGuid', 'clipPodcastGuid') + .addSelect('clipPodcast.podcastIndexId', 'clipPodcastIndexId') + .addSelect('clipPodcast.shrunkImageUrl', 'clipPodcastShrunkImageUrl') + .addSelect('clipPodcast.title', 'clipPodcastTitle') + .addSelect('clipPodcast.value', 'clipPodcastValue') + .leftJoin(`${tableName}.episode`, 'episode') + .leftJoinAndSelect(`episode.liveItem`, 'liveItem') + .leftJoin('episode.podcast', 'podcast') + .leftJoin(`${tableName}.mediaRef`, 'mediaRef') + .leftJoin('mediaRef.episode', 'clipEpisode') + .leftJoin('clipEpisode.podcast', 'clipPodcast') + .leftJoin(`${tableName}.owner`, 'owner') + .where('owner.id = :loggedInUserId', { loggedInUserId }) + .orderBy(orderByParam1, orderByParam2) + .offset(skip) + .limit(take) + .getRawMany() as any } } @@ -506,7 +504,6 @@ export const addOrUpdateHistoryItem = async (loggedInUserId, query) => { if (!query['userPlaybackPosition'] && query['userPlaybackPosition'] !== 0) { throw new createError.NotFound('A userPlaybackPosition must be provided.') } - await addOrUpdateDBHistoryItem(loggedInUserId, query) } From fda4ecac20c07c66594ea691d6700af9b778b825 Mon Sep 17 00:00:00 2001 From: Mitch Downey Date: Tue, 21 Nov 2023 19:46:09 -0600 Subject: [PATCH 2/4] Fix create default playlist bug --- src/controllers/playlist.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/controllers/playlist.ts b/src/controllers/playlist.ts index cb76e5a3..ddbb104b 100644 --- a/src/controllers/playlist.ts +++ b/src/controllers/playlist.ts @@ -167,6 +167,7 @@ const getOrCreateDefaultPlaylist = async (medium, loggedInUserId) => { if (!playlist) { const newDefaultPlaylistData = { owner: loggedInUserId, + isDefault: true, description: '', isPublic: false, itemsOrder: [], From 11ca752b5f3335d421b11df080ea2fe82e873bab Mon Sep 17 00:00:00 2001 From: Mitch Downey Date: Tue, 21 Nov 2023 20:35:43 -0600 Subject: [PATCH 3/4] Include remoteMedium on vtsChapter objects --- src/controllers/episode.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/controllers/episode.ts b/src/controllers/episode.ts index a2022b97..097eafbd 100644 --- a/src/controllers/episode.ts +++ b/src/controllers/episode.ts @@ -625,6 +625,8 @@ const getLightningKeysendVTSAsChapters = async (episodeId: string) => { const includeRelations = true podcast = await getPodcastByPodcastGuid(remoteFeedGuid, includeRelations) remotePodcastId = podcast.id + const remoteMedium = podcast.medium + if (podcast?.id && remoteItemGuid && remoteFeedGuid) { try { episode = await getEpisodeByPodcastIdAndGuid(podcast.id, remoteItemGuid) @@ -669,7 +671,8 @@ const getLightningKeysendVTSAsChapters = async (episodeId: string) => { startTime, title, remoteEpisodeId, - remotePodcastId + remotePodcastId, + remoteMedium } vtsChapters.push(vtsChapter) From 252c355afa643eecfb09d6449eeea7d7c3dc4037 Mon Sep 17 00:00:00 2001 From: Mitch Downey Date: Tue, 21 Nov 2023 20:35:58 -0600 Subject: [PATCH 4/4] Bump to version 4.15.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d91af883..0485f1b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "podverse-api", - "version": "4.15.10", + "version": "4.15.11", "description": "Data API, database migration scripts, and backend services for all Podverse models.", "contributors": [ "Mitch Downey"