my-video-playlists.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import express from 'express'
  2. import { forceNumber } from '@peertube/peertube-core-utils'
  3. import { VideosExistInPlaylists } from '@peertube/peertube-models'
  4. import { uuidToShort } from '@peertube/peertube-node-utils'
  5. import { asyncMiddleware, authenticate } from '../../../middlewares/index.js'
  6. import { doVideosInPlaylistExistValidator } from '../../../middlewares/validators/videos/video-playlists.js'
  7. import { VideoPlaylistModel } from '../../../models/video/video-playlist.js'
  8. const myVideoPlaylistsRouter = express.Router()
  9. myVideoPlaylistsRouter.get('/me/video-playlists/videos-exist',
  10. authenticate,
  11. doVideosInPlaylistExistValidator,
  12. asyncMiddleware(doVideosInPlaylistExist)
  13. )
  14. // ---------------------------------------------------------------------------
  15. export {
  16. myVideoPlaylistsRouter
  17. }
  18. // ---------------------------------------------------------------------------
  19. async function doVideosInPlaylistExist (req: express.Request, res: express.Response) {
  20. const videoIds = req.query.videoIds.map(i => forceNumber(i))
  21. const user = res.locals.oauth.token.User
  22. const results = await VideoPlaylistModel.listPlaylistSummariesOf(user.Account.id, videoIds)
  23. const existObject: VideosExistInPlaylists = {}
  24. for (const videoId of videoIds) {
  25. existObject[videoId] = []
  26. }
  27. for (const result of results) {
  28. for (const element of result.VideoPlaylistElements) {
  29. existObject[element.videoId].push({
  30. playlistElementId: element.id,
  31. playlistId: result.id,
  32. playlistDisplayName: result.name,
  33. playlistShortUUID: uuidToShort(result.uuid),
  34. startTimestamp: element.startTimestamp,
  35. stopTimestamp: element.stopTimestamp
  36. })
  37. }
  38. }
  39. return res.json(existObject)
  40. }