]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/users/my-video-playlists.ts
Share playlists state
[github/Chocobozzz/PeerTube.git] / server / controllers / api / users / my-video-playlists.ts
1 import * as express from 'express'
2 import { asyncMiddleware, authenticate } from '../../../middlewares'
3 import { doVideosInPlaylistExistValidator } from '../../../middlewares/validators/videos/video-playlists'
4 import { VideoPlaylistModel } from '../../../models/video/video-playlist'
5 import { VideosExistInPlaylists } from '../../../../shared/models/videos/playlist/video-exist-in-playlist.model'
6
7 const myVideoPlaylistsRouter = express.Router()
8
9 myVideoPlaylistsRouter.get('/me/video-playlists/videos-exist',
10 authenticate,
11 doVideosInPlaylistExistValidator,
12 asyncMiddleware(doVideosInPlaylistExist)
13 )
14
15 // ---------------------------------------------------------------------------
16
17 export {
18 myVideoPlaylistsRouter
19 }
20
21 // ---------------------------------------------------------------------------
22
23 async function doVideosInPlaylistExist (req: express.Request, res: express.Response) {
24 const videoIds = req.query.videoIds.map(i => parseInt(i + '', 10))
25 const user = res.locals.oauth.token.User
26
27 const results = await VideoPlaylistModel.listPlaylistIdsOf(user.Account.id, videoIds)
28
29 const existObject: VideosExistInPlaylists = {}
30
31 for (const videoId of videoIds) {
32 existObject[videoId] = []
33 }
34
35 for (const result of results) {
36 for (const element of result.VideoPlaylistElements) {
37 existObject[element.videoId].push({
38 playlistElementId: element.id,
39 playlistId: result.id,
40 startTimestamp: element.startTimestamp,
41 stopTimestamp: element.stopTimestamp
42 })
43 }
44 }
45
46 return res.json(existObject)
47 }