Skip to content

Commit

Permalink
Fix playlist item serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
goto-bus-stop committed Aug 28, 2024
1 parent 500d9a9 commit b6009ca
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 13 deletions.
4 changes: 2 additions & 2 deletions src/controllers/playlists.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { HTTPError, PlaylistNotFoundError, PlaylistItemNotFoundError } from '../errors/index.js';
import { serializePlaylist } from '../utils/serialize.js';
import { serializePlaylist, serializePlaylistItem } from '../utils/serialize.js';
import getOffsetPagination from '../utils/getOffsetPagination.js';
import toItemResponse from '../utils/toItemResponse.js';
import toListResponse from '../utils/toListResponse.js';
Expand Down Expand Up @@ -288,7 +288,7 @@ async function addPlaylistItems(req) {
playlistSize,
} = await playlists.addPlaylistItems(playlist, items, { after: afterID });

return toListResponse(added, {
return toListResponse(added.map(serializePlaylistItem), {
included: {
media: ['media'],
},
Expand Down
23 changes: 12 additions & 11 deletions src/plugins/playlists.js
Original file line number Diff line number Diff line change
Expand Up @@ -577,11 +577,6 @@ class PlaylistsRepository {
* @param {Playlist} playlist
* @param {PlaylistItemDesc[]} items
* @param {{ after?: PlaylistItemID|null }} options
* @returns {Promise<{
* added: PlaylistItem[],
* afterID: PlaylistItemID?,
* playlistSize: number,
* }>}
*/
async addPlaylistItems(playlist, items, { after = null } = {}) {
const { users } = this.#uw;
Expand All @@ -599,8 +594,7 @@ class PlaylistsRepository {
const { start, end } = getStartEnd(item, media);
return {
id: /** @type {PlaylistItemID} */ (randomUUID()),
playlistID: playlist.id,
mediaID: media.id,
media: media,
artist: item.artist ?? media.artist,
title: item.title ?? media.title,
start,
Expand All @@ -609,9 +603,16 @@ class PlaylistsRepository {
});

const result = await this.#uw.db.transaction().execute(async (tx) => {
const added = await tx.insertInto('playlistItems')
.returningAll()
.values(playlistItems)
await tx.insertInto('playlistItems')
.values(playlistItems.map((item) => ({
id: item.id,
playlistID: playlist.id,
mediaID: item.media.id,
artist: item.artist,
title: item.title,
start: item.start,
end: item.end,
})))
.execute();

const result = await tx.selectFrom('playlists')
Expand All @@ -633,7 +634,7 @@ class PlaylistsRepository {
.executeTakeFirstOrThrow();

return {
added: added,
added: playlistItems,
afterID: after,
playlistSize: newItems.length,
};
Expand Down
25 changes: 25 additions & 0 deletions src/utils/serialize.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,31 @@ export function serializePlaylist(model) {
};
}

/**
* @param {{
* id: import('../schema.js').PlaylistItemID,
* media: import('../schema.js').Media,
* artist: string,
* title: string,
* start: number,
* end: number,
* createdAt?: Date,
* updatedAt?: Date,
* }} model
*/
export function serializePlaylistItem(model) {
return {
_id: model.id,
media: model.media,
artist: model.artist,
title: model.title,
start: model.start,
end: model.end,
createdAt: model.createdAt?.toISOString(),
updatedAt: model.updatedAt?.toISOString(),
};
}

/**
* @param {import('../schema.js').User} model
*/
Expand Down

0 comments on commit b6009ca

Please sign in to comment.