diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | server/controllers/api/accounts.ts | 168 | ||||
-rw-r--r-- | server/controllers/api/video-channel.ts | 173 | ||||
-rw-r--r-- | server/middlewares/validators/video-channels.ts | 25 | ||||
-rw-r--r-- | server/tests/api/check-params/video-channels.ts | 58 | ||||
-rw-r--r-- | server/tests/api/videos/video-channels.ts | 10 | ||||
-rw-r--r-- | server/tests/api/videos/video-nsfw.ts | 4 | ||||
-rw-r--r-- | server/tests/utils/videos/video-channels.ts | 14 | ||||
-rw-r--r-- | server/tests/utils/videos/videos.ts | 3 | ||||
-rw-r--r-- | support/doc/api/html/index.html | 901 | ||||
-rw-r--r-- | support/doc/api/openapi.yaml | 69 |
11 files changed, 588 insertions, 839 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index ac3f61735..4a327737d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md | |||
@@ -6,7 +6,7 @@ | |||
6 | 6 | ||
7 | * Hide by default NSFW videos. Update the `instance.default_nsfw_policy` configuration to `blur` to keep the old behaviour | 7 | * Hide by default NSFW videos. Update the `instance.default_nsfw_policy` configuration to `blur` to keep the old behaviour |
8 | * Move video channels routes: | 8 | * Move video channels routes: |
9 | * `/videos/channels` routes to `/accounts/{accountId}/video-channels` | 9 | * `/videos/channels` routes to `/video-channels` |
10 | * `/videos/accounts/{accountId}/channels` route to `/accounts/{accountId}/video-channels` | 10 | * `/videos/accounts/{accountId}/channels` route to `/accounts/{accountId}/video-channels` |
11 | * PeerTube now listen on 127.0.0.1 by default | 11 | * PeerTube now listen on 127.0.0.1 by default |
12 | * Use ISO 639 for language (*en*, *es*, *fr*...) | 12 | * Use ISO 639 for language (*en*, *es*, *fr*...) |
diff --git a/server/controllers/api/accounts.ts b/server/controllers/api/accounts.ts index 85987c912..ccae0436b 100644 --- a/server/controllers/api/accounts.ts +++ b/server/controllers/api/accounts.ts | |||
@@ -1,30 +1,18 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import { getFormattedObjects, resetSequelizeInstance } from '../../helpers/utils' | 2 | import { getFormattedObjects } from '../../helpers/utils' |
3 | import { | 3 | import { |
4 | asyncMiddleware, | 4 | asyncMiddleware, |
5 | authenticate, | ||
6 | listVideoAccountChannelsValidator, | 5 | listVideoAccountChannelsValidator, |
7 | optionalAuthenticate, | 6 | optionalAuthenticate, |
8 | paginationValidator, | 7 | paginationValidator, |
9 | setDefaultPagination, | 8 | setDefaultPagination, |
10 | setDefaultSort, | 9 | setDefaultSort |
11 | videoChannelsAddValidator, | ||
12 | videoChannelsGetValidator, | ||
13 | videoChannelsRemoveValidator, | ||
14 | videoChannelsUpdateValidator | ||
15 | } from '../../middlewares' | 10 | } from '../../middlewares' |
16 | import { accountsGetValidator, accountsSortValidator, videosSortValidator } from '../../middlewares/validators' | 11 | import { accountsGetValidator, accountsSortValidator, videosSortValidator } from '../../middlewares/validators' |
17 | import { AccountModel } from '../../models/account/account' | 12 | import { AccountModel } from '../../models/account/account' |
18 | import { VideoModel } from '../../models/video/video' | 13 | import { VideoModel } from '../../models/video/video' |
19 | import { isNSFWHidden } from '../../helpers/express-utils' | 14 | import { isNSFWHidden } from '../../helpers/express-utils' |
20 | import { VideoChannelModel } from '../../models/video/video-channel' | 15 | import { VideoChannelModel } from '../../models/video/video-channel' |
21 | import { VideoChannelCreate, VideoChannelUpdate } from '../../../shared' | ||
22 | import { sendUpdateActor } from '../../lib/activitypub/send' | ||
23 | import { createVideoChannel } from '../../lib/video-channel' | ||
24 | import { setAsyncActorKeys } from '../../lib/activitypub' | ||
25 | import { sequelizeTypescript } from '../../initializers' | ||
26 | import { logger } from '../../helpers/logger' | ||
27 | import { retryTransactionWrapper } from '../../helpers/database-utils' | ||
28 | 16 | ||
29 | const accountsRouter = express.Router() | 17 | const accountsRouter = express.Router() |
30 | 18 | ||
@@ -56,39 +44,6 @@ accountsRouter.get('/:accountId/video-channels', | |||
56 | asyncMiddleware(listVideoAccountChannels) | 44 | asyncMiddleware(listVideoAccountChannels) |
57 | ) | 45 | ) |
58 | 46 | ||
59 | accountsRouter.post('/:accountId/video-channels', | ||
60 | authenticate, | ||
61 | videoChannelsAddValidator, | ||
62 | asyncMiddleware(addVideoChannelRetryWrapper) | ||
63 | ) | ||
64 | |||
65 | accountsRouter.put('/:accountId/video-channels/:id', | ||
66 | authenticate, | ||
67 | asyncMiddleware(videoChannelsUpdateValidator), | ||
68 | updateVideoChannelRetryWrapper | ||
69 | ) | ||
70 | |||
71 | accountsRouter.delete('/:accountId/video-channels/:id', | ||
72 | authenticate, | ||
73 | asyncMiddleware(videoChannelsRemoveValidator), | ||
74 | asyncMiddleware(removeVideoChannelRetryWrapper) | ||
75 | ) | ||
76 | |||
77 | accountsRouter.get('/:accountId/video-channels/:id', | ||
78 | asyncMiddleware(videoChannelsGetValidator), | ||
79 | asyncMiddleware(getVideoChannel) | ||
80 | ) | ||
81 | |||
82 | accountsRouter.get('/:accountId/video-channels/:id/videos', | ||
83 | asyncMiddleware(videoChannelsGetValidator), | ||
84 | paginationValidator, | ||
85 | videosSortValidator, | ||
86 | setDefaultSort, | ||
87 | setDefaultPagination, | ||
88 | optionalAuthenticate, | ||
89 | asyncMiddleware(listVideoChannelVideos) | ||
90 | ) | ||
91 | |||
92 | // --------------------------------------------------------------------------- | 47 | // --------------------------------------------------------------------------- |
93 | 48 | ||
94 | export { | 49 | export { |
@@ -115,125 +70,6 @@ async function listVideoAccountChannels (req: express.Request, res: express.Resp | |||
115 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 70 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
116 | } | 71 | } |
117 | 72 | ||
118 | // Wrapper to video channel add that retry the async function if there is a database error | ||
119 | // We need this because we run the transaction in SERIALIZABLE isolation that can fail | ||
120 | async function addVideoChannelRetryWrapper (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
121 | const options = { | ||
122 | arguments: [ req, res ], | ||
123 | errorMessage: 'Cannot insert the video video channel with many retries.' | ||
124 | } | ||
125 | |||
126 | const videoChannel = await retryTransactionWrapper(addVideoChannel, options) | ||
127 | return res.json({ | ||
128 | videoChannel: { | ||
129 | id: videoChannel.id, | ||
130 | uuid: videoChannel.Actor.uuid | ||
131 | } | ||
132 | }).end() | ||
133 | } | ||
134 | |||
135 | async function addVideoChannel (req: express.Request, res: express.Response) { | ||
136 | const videoChannelInfo: VideoChannelCreate = req.body | ||
137 | const account: AccountModel = res.locals.oauth.token.User.Account | ||
138 | |||
139 | const videoChannelCreated: VideoChannelModel = await sequelizeTypescript.transaction(async t => { | ||
140 | return createVideoChannel(videoChannelInfo, account, t) | ||
141 | }) | ||
142 | |||
143 | setAsyncActorKeys(videoChannelCreated.Actor) | ||
144 | .catch(err => logger.error('Cannot set async actor keys for account %s.', videoChannelCreated.Actor.uuid, { err })) | ||
145 | |||
146 | logger.info('Video channel with uuid %s created.', videoChannelCreated.Actor.uuid) | ||
147 | |||
148 | return videoChannelCreated | ||
149 | } | ||
150 | |||
151 | async function updateVideoChannelRetryWrapper (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
152 | const options = { | ||
153 | arguments: [ req, res ], | ||
154 | errorMessage: 'Cannot update the video with many retries.' | ||
155 | } | ||
156 | |||
157 | await retryTransactionWrapper(updateVideoChannel, options) | ||
158 | |||
159 | return res.type('json').status(204).end() | ||
160 | } | ||
161 | |||
162 | async function updateVideoChannel (req: express.Request, res: express.Response) { | ||
163 | const videoChannelInstance = res.locals.videoChannel as VideoChannelModel | ||
164 | const videoChannelFieldsSave = videoChannelInstance.toJSON() | ||
165 | const videoChannelInfoToUpdate = req.body as VideoChannelUpdate | ||
166 | |||
167 | try { | ||
168 | await sequelizeTypescript.transaction(async t => { | ||
169 | const sequelizeOptions = { | ||
170 | transaction: t | ||
171 | } | ||
172 | |||
173 | if (videoChannelInfoToUpdate.name !== undefined) videoChannelInstance.set('name', videoChannelInfoToUpdate.name) | ||
174 | if (videoChannelInfoToUpdate.description !== undefined) videoChannelInstance.set('description', videoChannelInfoToUpdate.description) | ||
175 | if (videoChannelInfoToUpdate.support !== undefined) videoChannelInstance.set('support', videoChannelInfoToUpdate.support) | ||
176 | |||
177 | const videoChannelInstanceUpdated = await videoChannelInstance.save(sequelizeOptions) | ||
178 | await sendUpdateActor(videoChannelInstanceUpdated, t) | ||
179 | }) | ||
180 | |||
181 | logger.info('Video channel with name %s and uuid %s updated.', videoChannelInstance.name, videoChannelInstance.Actor.uuid) | ||
182 | } catch (err) { | ||
183 | logger.debug('Cannot update the video channel.', { err }) | ||
184 | |||
185 | // Force fields we want to update | ||
186 | // If the transaction is retried, sequelize will think the object has not changed | ||
187 | // So it will skip the SQL request, even if the last one was ROLLBACKed! | ||
188 | resetSequelizeInstance(videoChannelInstance, videoChannelFieldsSave) | ||
189 | |||
190 | throw err | ||
191 | } | ||
192 | } | ||
193 | |||
194 | async function removeVideoChannelRetryWrapper (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
195 | const options = { | ||
196 | arguments: [ req, res ], | ||
197 | errorMessage: 'Cannot remove the video channel with many retries.' | ||
198 | } | ||
199 | |||
200 | await retryTransactionWrapper(removeVideoChannel, options) | ||
201 | |||
202 | return res.type('json').status(204).end() | ||
203 | } | ||
204 | |||
205 | async function removeVideoChannel (req: express.Request, res: express.Response) { | ||
206 | const videoChannelInstance: VideoChannelModel = res.locals.videoChannel | ||
207 | |||
208 | return sequelizeTypescript.transaction(async t => { | ||
209 | await videoChannelInstance.destroy({ transaction: t }) | ||
210 | |||
211 | logger.info('Video channel with name %s and uuid %s deleted.', videoChannelInstance.name, videoChannelInstance.Actor.uuid) | ||
212 | }) | ||
213 | |||
214 | } | ||
215 | |||
216 | async function getVideoChannel (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
217 | const videoChannelWithVideos = await VideoChannelModel.loadAndPopulateAccountAndVideos(res.locals.videoChannel.id) | ||
218 | |||
219 | return res.json(videoChannelWithVideos.toFormattedJSON()) | ||
220 | } | ||
221 | |||
222 | async function listVideoChannelVideos (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
223 | const videoChannelInstance: VideoChannelModel = res.locals.videoChannel | ||
224 | |||
225 | const resultList = await VideoModel.listForApi({ | ||
226 | start: req.query.start, | ||
227 | count: req.query.count, | ||
228 | sort: req.query.sort, | ||
229 | hideNSFW: isNSFWHidden(res), | ||
230 | withFiles: false, | ||
231 | videoChannelId: videoChannelInstance.id | ||
232 | }) | ||
233 | |||
234 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | ||
235 | } | ||
236 | |||
237 | async function listAccountVideos (req: express.Request, res: express.Response, next: express.NextFunction) { | 73 | async function listAccountVideos (req: express.Request, res: express.Response, next: express.NextFunction) { |
238 | const account: AccountModel = res.locals.account | 74 | const account: AccountModel = res.locals.account |
239 | 75 | ||
diff --git a/server/controllers/api/video-channel.ts b/server/controllers/api/video-channel.ts index d57273747..6241aaa5c 100644 --- a/server/controllers/api/video-channel.ts +++ b/server/controllers/api/video-channel.ts | |||
@@ -1,13 +1,30 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import { getFormattedObjects } from '../../helpers/utils' | 2 | import { getFormattedObjects, resetSequelizeInstance } from '../../helpers/utils' |
3 | import { | 3 | import { |
4 | asyncMiddleware, | 4 | asyncMiddleware, |
5 | authenticate, | ||
6 | optionalAuthenticate, | ||
5 | paginationValidator, | 7 | paginationValidator, |
6 | setDefaultPagination, | 8 | setDefaultPagination, |
7 | setDefaultSort, | 9 | setDefaultSort, |
8 | videoChannelsSortValidator | 10 | videoChannelsAddValidator, |
11 | videoChannelsGetValidator, | ||
12 | videoChannelsRemoveValidator, | ||
13 | videoChannelsSortValidator, | ||
14 | videoChannelsUpdateValidator | ||
9 | } from '../../middlewares' | 15 | } from '../../middlewares' |
10 | import { VideoChannelModel } from '../../models/video/video-channel' | 16 | import { VideoChannelModel } from '../../models/video/video-channel' |
17 | import { videosSortValidator } from '../../middlewares/validators' | ||
18 | import { sendUpdateActor } from '../../lib/activitypub/send' | ||
19 | import { VideoChannelCreate, VideoChannelUpdate } from '../../../shared' | ||
20 | import { createVideoChannel } from '../../lib/video-channel' | ||
21 | import { isNSFWHidden } from '../../helpers/express-utils' | ||
22 | import { setAsyncActorKeys } from '../../lib/activitypub' | ||
23 | import { retryTransactionWrapper } from '../../helpers/database-utils' | ||
24 | import { AccountModel } from '../../models/account/account' | ||
25 | import { sequelizeTypescript } from '../../initializers' | ||
26 | import { logger } from '../../helpers/logger' | ||
27 | import { VideoModel } from '../../models/video/video' | ||
11 | 28 | ||
12 | const videoChannelRouter = express.Router() | 29 | const videoChannelRouter = express.Router() |
13 | 30 | ||
@@ -19,6 +36,39 @@ videoChannelRouter.get('/', | |||
19 | asyncMiddleware(listVideoChannels) | 36 | asyncMiddleware(listVideoChannels) |
20 | ) | 37 | ) |
21 | 38 | ||
39 | videoChannelRouter.post('/', | ||
40 | authenticate, | ||
41 | videoChannelsAddValidator, | ||
42 | asyncMiddleware(addVideoChannelRetryWrapper) | ||
43 | ) | ||
44 | |||
45 | videoChannelRouter.put('/:id', | ||
46 | authenticate, | ||
47 | asyncMiddleware(videoChannelsUpdateValidator), | ||
48 | updateVideoChannelRetryWrapper | ||
49 | ) | ||
50 | |||
51 | videoChannelRouter.delete('/:id', | ||
52 | authenticate, | ||
53 | asyncMiddleware(videoChannelsRemoveValidator), | ||
54 | asyncMiddleware(removeVideoChannelRetryWrapper) | ||
55 | ) | ||
56 | |||
57 | videoChannelRouter.get('/:id', | ||
58 | asyncMiddleware(videoChannelsGetValidator), | ||
59 | asyncMiddleware(getVideoChannel) | ||
60 | ) | ||
61 | |||
62 | videoChannelRouter.get('/:id/videos', | ||
63 | asyncMiddleware(videoChannelsGetValidator), | ||
64 | paginationValidator, | ||
65 | videosSortValidator, | ||
66 | setDefaultSort, | ||
67 | setDefaultPagination, | ||
68 | optionalAuthenticate, | ||
69 | asyncMiddleware(listVideoChannelVideos) | ||
70 | ) | ||
71 | |||
22 | // --------------------------------------------------------------------------- | 72 | // --------------------------------------------------------------------------- |
23 | 73 | ||
24 | export { | 74 | export { |
@@ -32,3 +82,122 @@ async function listVideoChannels (req: express.Request, res: express.Response, n | |||
32 | 82 | ||
33 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 83 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
34 | } | 84 | } |
85 | |||
86 | // Wrapper to video channel add that retry the async function if there is a database error | ||
87 | // We need this because we run the transaction in SERIALIZABLE isolation that can fail | ||
88 | async function addVideoChannelRetryWrapper (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
89 | const options = { | ||
90 | arguments: [ req, res ], | ||
91 | errorMessage: 'Cannot insert the video video channel with many retries.' | ||
92 | } | ||
93 | |||
94 | const videoChannel = await retryTransactionWrapper(addVideoChannel, options) | ||
95 | return res.json({ | ||
96 | videoChannel: { | ||
97 | id: videoChannel.id, | ||
98 | uuid: videoChannel.Actor.uuid | ||
99 | } | ||
100 | }).end() | ||
101 | } | ||
102 | |||
103 | async function addVideoChannel (req: express.Request, res: express.Response) { | ||
104 | const videoChannelInfo: VideoChannelCreate = req.body | ||
105 | const account: AccountModel = res.locals.oauth.token.User.Account | ||
106 | |||
107 | const videoChannelCreated: VideoChannelModel = await sequelizeTypescript.transaction(async t => { | ||
108 | return createVideoChannel(videoChannelInfo, account, t) | ||
109 | }) | ||
110 | |||
111 | setAsyncActorKeys(videoChannelCreated.Actor) | ||
112 | .catch(err => logger.error('Cannot set async actor keys for account %s.', videoChannelCreated.Actor.uuid, { err })) | ||
113 | |||
114 | logger.info('Video channel with uuid %s created.', videoChannelCreated.Actor.uuid) | ||
115 | |||
116 | return videoChannelCreated | ||
117 | } | ||
118 | |||
119 | async function updateVideoChannelRetryWrapper (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
120 | const options = { | ||
121 | arguments: [ req, res ], | ||
122 | errorMessage: 'Cannot update the video with many retries.' | ||
123 | } | ||
124 | |||
125 | await retryTransactionWrapper(updateVideoChannel, options) | ||
126 | |||
127 | return res.type('json').status(204).end() | ||
128 | } | ||
129 | |||
130 | async function updateVideoChannel (req: express.Request, res: express.Response) { | ||
131 | const videoChannelInstance = res.locals.videoChannel as VideoChannelModel | ||
132 | const videoChannelFieldsSave = videoChannelInstance.toJSON() | ||
133 | const videoChannelInfoToUpdate = req.body as VideoChannelUpdate | ||
134 | |||
135 | try { | ||
136 | await sequelizeTypescript.transaction(async t => { | ||
137 | const sequelizeOptions = { | ||
138 | transaction: t | ||
139 | } | ||
140 | |||
141 | if (videoChannelInfoToUpdate.name !== undefined) videoChannelInstance.set('name', videoChannelInfoToUpdate.name) | ||
142 | if (videoChannelInfoToUpdate.description !== undefined) videoChannelInstance.set('description', videoChannelInfoToUpdate.description) | ||
143 | if (videoChannelInfoToUpdate.support !== undefined) videoChannelInstance.set('support', videoChannelInfoToUpdate.support) | ||
144 | |||
145 | const videoChannelInstanceUpdated = await videoChannelInstance.save(sequelizeOptions) | ||
146 | await sendUpdateActor(videoChannelInstanceUpdated, t) | ||
147 | }) | ||
148 | |||
149 | logger.info('Video channel with name %s and uuid %s updated.', videoChannelInstance.name, videoChannelInstance.Actor.uuid) | ||
150 | } catch (err) { | ||
151 | logger.debug('Cannot update the video channel.', { err }) | ||
152 | |||
153 | // Force fields we want to update | ||
154 | // If the transaction is retried, sequelize will think the object has not changed | ||
155 | // So it will skip the SQL request, even if the last one was ROLLBACKed! | ||
156 | resetSequelizeInstance(videoChannelInstance, videoChannelFieldsSave) | ||
157 | |||
158 | throw err | ||
159 | } | ||
160 | } | ||
161 | |||
162 | async function removeVideoChannelRetryWrapper (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
163 | const options = { | ||
164 | arguments: [ req, res ], | ||
165 | errorMessage: 'Cannot remove the video channel with many retries.' | ||
166 | } | ||
167 | |||
168 | await retryTransactionWrapper(removeVideoChannel, options) | ||
169 | |||
170 | return res.type('json').status(204).end() | ||
171 | } | ||
172 | |||
173 | async function removeVideoChannel (req: express.Request, res: express.Response) { | ||
174 | const videoChannelInstance: VideoChannelModel = res.locals.videoChannel | ||
175 | |||
176 | return sequelizeTypescript.transaction(async t => { | ||
177 | await videoChannelInstance.destroy({ transaction: t }) | ||
178 | |||
179 | logger.info('Video channel with name %s and uuid %s deleted.', videoChannelInstance.name, videoChannelInstance.Actor.uuid) | ||
180 | }) | ||
181 | |||
182 | } | ||
183 | |||
184 | async function getVideoChannel (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
185 | const videoChannelWithVideos = await VideoChannelModel.loadAndPopulateAccountAndVideos(res.locals.videoChannel.id) | ||
186 | |||
187 | return res.json(videoChannelWithVideos.toFormattedJSON()) | ||
188 | } | ||
189 | |||
190 | async function listVideoChannelVideos (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
191 | const videoChannelInstance: VideoChannelModel = res.locals.videoChannel | ||
192 | |||
193 | const resultList = await VideoModel.listForApi({ | ||
194 | start: req.query.start, | ||
195 | count: req.query.count, | ||
196 | sort: req.query.sort, | ||
197 | hideNSFW: isNSFWHidden(res), | ||
198 | withFiles: false, | ||
199 | videoChannelId: videoChannelInstance.id | ||
200 | }) | ||
201 | |||
202 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | ||
203 | } | ||
diff --git a/server/middlewares/validators/video-channels.ts b/server/middlewares/validators/video-channels.ts index 9e6f459cf..a70f196df 100644 --- a/server/middlewares/validators/video-channels.ts +++ b/server/middlewares/validators/video-channels.ts | |||
@@ -27,7 +27,6 @@ const listVideoAccountChannelsValidator = [ | |||
27 | ] | 27 | ] |
28 | 28 | ||
29 | const videoChannelsAddValidator = [ | 29 | const videoChannelsAddValidator = [ |
30 | param('accountId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid account id'), | ||
31 | body('name').custom(isVideoChannelNameValid).withMessage('Should have a valid name'), | 30 | body('name').custom(isVideoChannelNameValid).withMessage('Should have a valid name'), |
32 | body('description').optional().custom(isVideoChannelDescriptionValid).withMessage('Should have a valid description'), | 31 | body('description').optional().custom(isVideoChannelDescriptionValid).withMessage('Should have a valid description'), |
33 | body('support').optional().custom(isVideoChannelSupportValid).withMessage('Should have a valid support text'), | 32 | body('support').optional().custom(isVideoChannelSupportValid).withMessage('Should have a valid support text'), |
@@ -43,7 +42,6 @@ const videoChannelsAddValidator = [ | |||
43 | 42 | ||
44 | const videoChannelsUpdateValidator = [ | 43 | const videoChannelsUpdateValidator = [ |
45 | param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), | 44 | param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), |
46 | param('accountId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid account id'), | ||
47 | body('name').optional().custom(isVideoChannelNameValid).withMessage('Should have a valid name'), | 45 | body('name').optional().custom(isVideoChannelNameValid).withMessage('Should have a valid name'), |
48 | body('description').optional().custom(isVideoChannelDescriptionValid).withMessage('Should have a valid description'), | 46 | body('description').optional().custom(isVideoChannelDescriptionValid).withMessage('Should have a valid description'), |
49 | body('support').optional().custom(isVideoChannelSupportValid).withMessage('Should have a valid support text'), | 47 | body('support').optional().custom(isVideoChannelSupportValid).withMessage('Should have a valid support text'), |
@@ -52,9 +50,7 @@ const videoChannelsUpdateValidator = [ | |||
52 | logger.debug('Checking videoChannelsUpdate parameters', { parameters: req.body }) | 50 | logger.debug('Checking videoChannelsUpdate parameters', { parameters: req.body }) |
53 | 51 | ||
54 | if (areValidationErrors(req, res)) return | 52 | if (areValidationErrors(req, res)) return |
55 | if (!await isAccountIdExist(req.params.accountId, res)) return | ||
56 | if (!await isVideoChannelExist(req.params.id, res)) return | 53 | if (!await isVideoChannelExist(req.params.id, res)) return |
57 | if (!checkAccountOwnsVideoChannel(res.locals.account, res.locals.videoChannel, res)) return | ||
58 | 54 | ||
59 | // We need to make additional checks | 55 | // We need to make additional checks |
60 | if (res.locals.videoChannel.Actor.isOwned() === false) { | 56 | if (res.locals.videoChannel.Actor.isOwned() === false) { |
@@ -75,17 +71,13 @@ const videoChannelsUpdateValidator = [ | |||
75 | 71 | ||
76 | const videoChannelsRemoveValidator = [ | 72 | const videoChannelsRemoveValidator = [ |
77 | param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), | 73 | param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), |
78 | param('accountId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid account id'), | ||
79 | 74 | ||
80 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { | 75 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { |
81 | logger.debug('Checking videoChannelsRemove parameters', { parameters: req.params }) | 76 | logger.debug('Checking videoChannelsRemove parameters', { parameters: req.params }) |
82 | 77 | ||
83 | if (areValidationErrors(req, res)) return | 78 | if (areValidationErrors(req, res)) return |
84 | if (!await isAccountIdExist(req.params.accountId, res)) return | ||
85 | if (!await isVideoChannelExist(req.params.id, res)) return | 79 | if (!await isVideoChannelExist(req.params.id, res)) return |
86 | 80 | ||
87 | if (!checkAccountOwnsVideoChannel(res.locals.account, res.locals.videoChannel, res)) return | ||
88 | // Check if the user who did the request is able to delete the video | ||
89 | if (!checkUserCanDeleteVideoChannel(res.locals.oauth.token.User, res.locals.videoChannel, res)) return | 81 | if (!checkUserCanDeleteVideoChannel(res.locals.oauth.token.User, res.locals.videoChannel, res)) return |
90 | if (!await checkVideoChannelIsNotTheLastOne(res)) return | 82 | if (!await checkVideoChannelIsNotTheLastOne(res)) return |
91 | 83 | ||
@@ -95,19 +87,14 @@ const videoChannelsRemoveValidator = [ | |||
95 | 87 | ||
96 | const videoChannelsGetValidator = [ | 88 | const videoChannelsGetValidator = [ |
97 | param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), | 89 | param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), |
98 | param('accountId').optional().custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid account id'), | ||
99 | 90 | ||
100 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { | 91 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { |
101 | logger.debug('Checking videoChannelsGet parameters', { parameters: req.params }) | 92 | logger.debug('Checking videoChannelsGet parameters', { parameters: req.params }) |
102 | 93 | ||
103 | if (areValidationErrors(req, res)) return | 94 | if (areValidationErrors(req, res)) return |
104 | 95 | ||
105 | // On some routes, accountId is optional (for example in the ActivityPub route) | ||
106 | if (req.params.accountId && !await isAccountIdExist(req.params.accountId, res)) return | ||
107 | if (!await isVideoChannelExist(req.params.id, res)) return | 96 | if (!await isVideoChannelExist(req.params.id, res)) return |
108 | 97 | ||
109 | if (res.locals.account && !checkAccountOwnsVideoChannel(res.locals.account, res.locals.videoChannel, res)) return | ||
110 | |||
111 | return next() | 98 | return next() |
112 | } | 99 | } |
113 | ] | 100 | ] |
@@ -160,15 +147,3 @@ async function checkVideoChannelIsNotTheLastOne (res: express.Response) { | |||
160 | 147 | ||
161 | return true | 148 | return true |
162 | } | 149 | } |
163 | |||
164 | function checkAccountOwnsVideoChannel (account: AccountModel, videoChannel: VideoChannelModel, res: express.Response) { | ||
165 | if (videoChannel.Account.id !== account.id) { | ||
166 | res.status(400) | ||
167 | .json({ error: 'This account does not own this video channel' }) | ||
168 | .end() | ||
169 | |||
170 | return false | ||
171 | } | ||
172 | |||
173 | return true | ||
174 | } | ||
diff --git a/server/tests/api/check-params/video-channels.ts b/server/tests/api/check-params/video-channels.ts index 25b2dc9b9..7cda879ed 100644 --- a/server/tests/api/check-params/video-channels.ts +++ b/server/tests/api/check-params/video-channels.ts | |||
@@ -27,10 +27,8 @@ const expect = chai.expect | |||
27 | 27 | ||
28 | describe('Test videos API validator', function () { | 28 | describe('Test videos API validator', function () { |
29 | const videoChannelPath = '/api/v1/video-channels' | 29 | const videoChannelPath = '/api/v1/video-channels' |
30 | const accountPath = '/api/v1/accounts/' | ||
31 | let server: ServerInfo | 30 | let server: ServerInfo |
32 | let accessTokenUser: string | 31 | let accessTokenUser: string |
33 | let accountUUID: string | ||
34 | let videoChannelUUID: string | 32 | let videoChannelUUID: string |
35 | 33 | ||
36 | // --------------------------------------------------------------- | 34 | // --------------------------------------------------------------- |
@@ -57,7 +55,6 @@ describe('Test videos API validator', function () { | |||
57 | { | 55 | { |
58 | const res = await getMyUserInformation(server.url, server.accessToken) | 56 | const res = await getMyUserInformation(server.url, server.accessToken) |
59 | const user: User = res.body | 57 | const user: User = res.body |
60 | accountUUID = user.account.uuid | ||
61 | videoChannelUUID = user.videoChannels[0].uuid | 58 | videoChannelUUID = user.videoChannels[0].uuid |
62 | } | 59 | } |
63 | }) | 60 | }) |
@@ -92,45 +89,46 @@ describe('Test videos API validator', function () { | |||
92 | description: 'super description', | 89 | description: 'super description', |
93 | support: 'super support text' | 90 | support: 'super support text' |
94 | } | 91 | } |
95 | let path: string | ||
96 | |||
97 | before(async function () { | ||
98 | path = accountPath + accountUUID + '/video-channels' | ||
99 | }) | ||
100 | 92 | ||
101 | it('Should fail with a non authenticated user', async function () { | 93 | it('Should fail with a non authenticated user', async function () { |
102 | await makePostBodyRequest({ url: server.url, path, token: 'none', fields: baseCorrectParams, statusCodeExpected: 401 }) | 94 | await makePostBodyRequest({ |
95 | url: server.url, | ||
96 | path: videoChannelPath, | ||
97 | token: 'none', | ||
98 | fields: baseCorrectParams, | ||
99 | statusCodeExpected: 401 | ||
100 | }) | ||
103 | }) | 101 | }) |
104 | 102 | ||
105 | it('Should fail with nothing', async function () { | 103 | it('Should fail with nothing', async function () { |
106 | const fields = {} | 104 | const fields = {} |
107 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 105 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) |
108 | }) | 106 | }) |
109 | 107 | ||
110 | it('Should fail without name', async function () { | 108 | it('Should fail without name', async function () { |
111 | const fields = omit(baseCorrectParams, 'name') | 109 | const fields = omit(baseCorrectParams, 'name') |
112 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 110 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) |
113 | }) | 111 | }) |
114 | 112 | ||
115 | it('Should fail with a long name', async function () { | 113 | it('Should fail with a long name', async function () { |
116 | const fields = immutableAssign(baseCorrectParams, { name: 'super'.repeat(25) }) | 114 | const fields = immutableAssign(baseCorrectParams, { name: 'super'.repeat(25) }) |
117 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 115 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) |
118 | }) | 116 | }) |
119 | 117 | ||
120 | it('Should fail with a long description', async function () { | 118 | it('Should fail with a long description', async function () { |
121 | const fields = immutableAssign(baseCorrectParams, { description: 'super'.repeat(60) }) | 119 | const fields = immutableAssign(baseCorrectParams, { description: 'super'.repeat(60) }) |
122 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 120 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) |
123 | }) | 121 | }) |
124 | 122 | ||
125 | it('Should fail with a long support text', async function () { | 123 | it('Should fail with a long support text', async function () { |
126 | const fields = immutableAssign(baseCorrectParams, { support: 'super'.repeat(70) }) | 124 | const fields = immutableAssign(baseCorrectParams, { support: 'super'.repeat(70) }) |
127 | await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields }) | 125 | await makePostBodyRequest({ url: server.url, path: videoChannelPath, token: server.accessToken, fields }) |
128 | }) | 126 | }) |
129 | 127 | ||
130 | it('Should succeed with the correct parameters', async function () { | 128 | it('Should succeed with the correct parameters', async function () { |
131 | await makePostBodyRequest({ | 129 | await makePostBodyRequest({ |
132 | url: server.url, | 130 | url: server.url, |
133 | path, | 131 | path: videoChannelPath, |
134 | token: server.accessToken, | 132 | token: server.accessToken, |
135 | fields: baseCorrectParams, | 133 | fields: baseCorrectParams, |
136 | statusCodeExpected: 200 | 134 | statusCodeExpected: 200 |
@@ -146,7 +144,7 @@ describe('Test videos API validator', function () { | |||
146 | let path: string | 144 | let path: string |
147 | 145 | ||
148 | before(async function () { | 146 | before(async function () { |
149 | path = accountPath + accountUUID + '/video-channels/' + videoChannelUUID | 147 | path = videoChannelPath + '/' + videoChannelUUID |
150 | }) | 148 | }) |
151 | 149 | ||
152 | it('Should fail with a non authenticated user', async function () { | 150 | it('Should fail with a non authenticated user', async function () { |
@@ -196,16 +194,10 @@ describe('Test videos API validator', function () { | |||
196 | }) | 194 | }) |
197 | 195 | ||
198 | describe('When getting a video channel', function () { | 196 | describe('When getting a video channel', function () { |
199 | let basePath: string | ||
200 | |||
201 | before(async function () { | ||
202 | basePath = accountPath + accountUUID + '/video-channels' | ||
203 | }) | ||
204 | |||
205 | it('Should return the list of the video channels with nothing', async function () { | 197 | it('Should return the list of the video channels with nothing', async function () { |
206 | const res = await makeGetRequest({ | 198 | const res = await makeGetRequest({ |
207 | url: server.url, | 199 | url: server.url, |
208 | path: basePath, | 200 | path: videoChannelPath, |
209 | statusCodeExpected: 200 | 201 | statusCodeExpected: 200 |
210 | }) | 202 | }) |
211 | 203 | ||
@@ -215,7 +207,7 @@ describe('Test videos API validator', function () { | |||
215 | it('Should fail without a correct uuid', async function () { | 207 | it('Should fail without a correct uuid', async function () { |
216 | await makeGetRequest({ | 208 | await makeGetRequest({ |
217 | url: server.url, | 209 | url: server.url, |
218 | path: basePath + '/coucou', | 210 | path: videoChannelPath + '/coucou', |
219 | statusCodeExpected: 400 | 211 | statusCodeExpected: 400 |
220 | }) | 212 | }) |
221 | }) | 213 | }) |
@@ -223,7 +215,7 @@ describe('Test videos API validator', function () { | |||
223 | it('Should return 404 with an incorrect video channel', async function () { | 215 | it('Should return 404 with an incorrect video channel', async function () { |
224 | await makeGetRequest({ | 216 | await makeGetRequest({ |
225 | url: server.url, | 217 | url: server.url, |
226 | path: basePath + '/4da6fde3-88f7-4d16-b119-108df5630b06', | 218 | path: videoChannelPath + '/4da6fde3-88f7-4d16-b119-108df5630b06', |
227 | statusCodeExpected: 404 | 219 | statusCodeExpected: 404 |
228 | }) | 220 | }) |
229 | }) | 221 | }) |
@@ -231,7 +223,7 @@ describe('Test videos API validator', function () { | |||
231 | it('Should succeed with the correct parameters', async function () { | 223 | it('Should succeed with the correct parameters', async function () { |
232 | await makeGetRequest({ | 224 | await makeGetRequest({ |
233 | url: server.url, | 225 | url: server.url, |
234 | path: basePath + '/' + videoChannelUUID, | 226 | path: videoChannelPath + '/' + videoChannelUUID, |
235 | statusCodeExpected: 200 | 227 | statusCodeExpected: 200 |
236 | }) | 228 | }) |
237 | }) | 229 | }) |
@@ -239,30 +231,26 @@ describe('Test videos API validator', function () { | |||
239 | 231 | ||
240 | describe('When deleting a video channel', function () { | 232 | describe('When deleting a video channel', function () { |
241 | it('Should fail with a non authenticated user', async function () { | 233 | it('Should fail with a non authenticated user', async function () { |
242 | await deleteVideoChannel(server.url, 'coucou', accountUUID, videoChannelUUID, 401) | 234 | await deleteVideoChannel(server.url, 'coucou', videoChannelUUID, 401) |
243 | }) | 235 | }) |
244 | 236 | ||
245 | it('Should fail with another authenticated user', async function () { | 237 | it('Should fail with another authenticated user', async function () { |
246 | await deleteVideoChannel(server.url, accessTokenUser, accountUUID, videoChannelUUID, 403) | 238 | await deleteVideoChannel(server.url, accessTokenUser, videoChannelUUID, 403) |
247 | }) | ||
248 | |||
249 | it('Should fail with an unknown account id', async function () { | ||
250 | await deleteVideoChannel(server.url, server.accessToken, 454554,videoChannelUUID, 404) | ||
251 | }) | 239 | }) |
252 | 240 | ||
253 | it('Should fail with an unknown video channel id', async function () { | 241 | it('Should fail with an unknown video channel id', async function () { |
254 | await deleteVideoChannel(server.url, server.accessToken, accountUUID,454554, 404) | 242 | await deleteVideoChannel(server.url, server.accessToken,454554, 404) |
255 | }) | 243 | }) |
256 | 244 | ||
257 | it('Should succeed with the correct parameters', async function () { | 245 | it('Should succeed with the correct parameters', async function () { |
258 | await deleteVideoChannel(server.url, server.accessToken, accountUUID, videoChannelUUID) | 246 | await deleteVideoChannel(server.url, server.accessToken, videoChannelUUID) |
259 | }) | 247 | }) |
260 | 248 | ||
261 | it('Should fail to delete the last user video channel', async function () { | 249 | it('Should fail to delete the last user video channel', async function () { |
262 | const res = await getVideoChannelsList(server.url, 0, 1) | 250 | const res = await getVideoChannelsList(server.url, 0, 1) |
263 | const lastVideoChannelUUID = res.body.data[0].uuid | 251 | const lastVideoChannelUUID = res.body.data[0].uuid |
264 | 252 | ||
265 | await deleteVideoChannel(server.url, server.accessToken, accountUUID, lastVideoChannelUUID, 409) | 253 | await deleteVideoChannel(server.url, server.accessToken, lastVideoChannelUUID, 409) |
266 | }) | 254 | }) |
267 | }) | 255 | }) |
268 | 256 | ||
diff --git a/server/tests/api/videos/video-channels.ts b/server/tests/api/videos/video-channels.ts index 04e7b8c6a..d24b8ab0b 100644 --- a/server/tests/api/videos/video-channels.ts +++ b/server/tests/api/videos/video-channels.ts | |||
@@ -63,7 +63,7 @@ describe('Test video channels', function () { | |||
63 | description: 'super video channel description', | 63 | description: 'super video channel description', |
64 | support: 'super video channel support text' | 64 | support: 'super video channel support text' |
65 | } | 65 | } |
66 | const res = await addVideoChannel(servers[0].url, servers[0].accessToken, accountUUID, videoChannel) | 66 | const res = await addVideoChannel(servers[0].url, servers[0].accessToken, videoChannel) |
67 | videoChannelId = res.body.videoChannel.id | 67 | videoChannelId = res.body.videoChannel.id |
68 | videoChannelUUID = res.body.videoChannel.uuid | 68 | videoChannelUUID = res.body.videoChannel.uuid |
69 | 69 | ||
@@ -130,7 +130,7 @@ describe('Test video channels', function () { | |||
130 | support: 'video channel support text updated' | 130 | support: 'video channel support text updated' |
131 | } | 131 | } |
132 | 132 | ||
133 | await updateVideoChannel(servers[0].url, servers[0].accessToken, accountUUID, videoChannelId, videoChannelAttributes) | 133 | await updateVideoChannel(servers[0].url, servers[0].accessToken, videoChannelId, videoChannelAttributes) |
134 | 134 | ||
135 | await wait(3000) | 135 | await wait(3000) |
136 | }) | 136 | }) |
@@ -149,7 +149,7 @@ describe('Test video channels', function () { | |||
149 | }) | 149 | }) |
150 | 150 | ||
151 | it('Should get video channel', async function () { | 151 | it('Should get video channel', async function () { |
152 | const res = await getVideoChannel(servers[0].url, accountUUID, videoChannelId) | 152 | const res = await getVideoChannel(servers[0].url, videoChannelId) |
153 | 153 | ||
154 | const videoChannel = res.body | 154 | const videoChannel = res.body |
155 | expect(videoChannel.displayName).to.equal('video channel updated') | 155 | expect(videoChannel.displayName).to.equal('video channel updated') |
@@ -161,7 +161,7 @@ describe('Test video channels', function () { | |||
161 | this.timeout(10000) | 161 | this.timeout(10000) |
162 | 162 | ||
163 | for (const server of servers) { | 163 | for (const server of servers) { |
164 | const res = await getVideoChannelVideos(server.url, server.accessToken, accountUUID, videoChannelUUID, 0, 5) | 164 | const res = await getVideoChannelVideos(server.url, server.accessToken, videoChannelUUID, 0, 5) |
165 | expect(res.body.total).to.equal(1) | 165 | expect(res.body.total).to.equal(1) |
166 | expect(res.body.data).to.be.an('array') | 166 | expect(res.body.data).to.be.an('array') |
167 | expect(res.body.data).to.have.lengthOf(1) | 167 | expect(res.body.data).to.have.lengthOf(1) |
@@ -170,7 +170,7 @@ describe('Test video channels', function () { | |||
170 | }) | 170 | }) |
171 | 171 | ||
172 | it('Should delete video channel', async function () { | 172 | it('Should delete video channel', async function () { |
173 | await deleteVideoChannel(servers[0].url, servers[0].accessToken, accountUUID, videoChannelId) | 173 | await deleteVideoChannel(servers[0].url, servers[0].accessToken, videoChannelId) |
174 | }) | 174 | }) |
175 | 175 | ||
176 | it('Should have video channel deleted', async function () { | 176 | it('Should have video channel deleted', async function () { |
diff --git a/server/tests/api/videos/video-nsfw.ts b/server/tests/api/videos/video-nsfw.ts index 8901f38f9..b8c85f45b 100644 --- a/server/tests/api/videos/video-nsfw.ts +++ b/server/tests/api/videos/video-nsfw.ts | |||
@@ -39,7 +39,7 @@ describe('Test video NSFW policy', function () { | |||
39 | getVideosListWithToken(server.url, token), | 39 | getVideosListWithToken(server.url, token), |
40 | searchVideoWithToken(server.url, 'n', token), | 40 | searchVideoWithToken(server.url, 'n', token), |
41 | getAccountVideos(server.url, token, accountUUID, 0, 5), | 41 | getAccountVideos(server.url, token, accountUUID, 0, 5), |
42 | getVideoChannelVideos(server.url, token, accountUUID, videoChannelUUID, 0, 5) | 42 | getVideoChannelVideos(server.url, token, videoChannelUUID, 0, 5) |
43 | ]) | 43 | ]) |
44 | } | 44 | } |
45 | 45 | ||
@@ -47,7 +47,7 @@ describe('Test video NSFW policy', function () { | |||
47 | getVideosList(server.url), | 47 | getVideosList(server.url), |
48 | searchVideo(server.url, 'n'), | 48 | searchVideo(server.url, 'n'), |
49 | getAccountVideos(server.url, undefined, accountUUID, 0, 5), | 49 | getAccountVideos(server.url, undefined, accountUUID, 0, 5), |
50 | getVideoChannelVideos(server.url, undefined, accountUUID, videoChannelUUID, 0, 5) | 50 | getVideoChannelVideos(server.url, undefined, videoChannelUUID, 0, 5) |
51 | ]) | 51 | ]) |
52 | }) | 52 | }) |
53 | } | 53 | } |
diff --git a/server/tests/utils/videos/video-channels.ts b/server/tests/utils/videos/video-channels.ts index 0b4fa89b7..978e21b19 100644 --- a/server/tests/utils/videos/video-channels.ts +++ b/server/tests/utils/videos/video-channels.ts | |||
@@ -34,11 +34,10 @@ function getAccountVideoChannelsList (url: string, accountId: number | string, s | |||
34 | function addVideoChannel ( | 34 | function addVideoChannel ( |
35 | url: string, | 35 | url: string, |
36 | token: string, | 36 | token: string, |
37 | accountId: number | string, | ||
38 | videoChannelAttributesArg: VideoChannelAttributes, | 37 | videoChannelAttributesArg: VideoChannelAttributes, |
39 | expectedStatus = 200 | 38 | expectedStatus = 200 |
40 | ) { | 39 | ) { |
41 | const path = '/api/v1/accounts/' + accountId + '/video-channels/' | 40 | const path = '/api/v1/video-channels/' |
42 | 41 | ||
43 | // Default attributes | 42 | // Default attributes |
44 | let attributes = { | 43 | let attributes = { |
@@ -59,13 +58,12 @@ function addVideoChannel ( | |||
59 | function updateVideoChannel ( | 58 | function updateVideoChannel ( |
60 | url: string, | 59 | url: string, |
61 | token: string, | 60 | token: string, |
62 | accountId: number | string, | ||
63 | channelId: number | string, | 61 | channelId: number | string, |
64 | attributes: VideoChannelAttributes, | 62 | attributes: VideoChannelAttributes, |
65 | expectedStatus = 204 | 63 | expectedStatus = 204 |
66 | ) { | 64 | ) { |
67 | const body = {} | 65 | const body = {} |
68 | const path = '/api/v1/accounts/' + accountId + '/video-channels/' + channelId | 66 | const path = '/api/v1/video-channels/' + channelId |
69 | 67 | ||
70 | if (attributes.name) body['name'] = attributes.name | 68 | if (attributes.name) body['name'] = attributes.name |
71 | if (attributes.description) body['description'] = attributes.description | 69 | if (attributes.description) body['description'] = attributes.description |
@@ -79,8 +77,8 @@ function updateVideoChannel ( | |||
79 | .expect(expectedStatus) | 77 | .expect(expectedStatus) |
80 | } | 78 | } |
81 | 79 | ||
82 | function deleteVideoChannel (url: string, token: string, accountId: number | string, channelId: number | string, expectedStatus = 204) { | 80 | function deleteVideoChannel (url: string, token: string, channelId: number | string, expectedStatus = 204) { |
83 | const path = '/api/v1/accounts/' + accountId + '/video-channels/' + channelId | 81 | const path = '/api/v1/video-channels/' + channelId |
84 | 82 | ||
85 | return request(url) | 83 | return request(url) |
86 | .delete(path) | 84 | .delete(path) |
@@ -89,8 +87,8 @@ function deleteVideoChannel (url: string, token: string, accountId: number | str | |||
89 | .expect(expectedStatus) | 87 | .expect(expectedStatus) |
90 | } | 88 | } |
91 | 89 | ||
92 | function getVideoChannel (url: string, accountId: number | string, channelId: number | string) { | 90 | function getVideoChannel (url: string, channelId: number | string) { |
93 | const path = '/api/v1/accounts/' + accountId + '/video-channels/' + channelId | 91 | const path = '/api/v1/video-channels/' + channelId |
94 | 92 | ||
95 | return request(url) | 93 | return request(url) |
96 | .get(path) | 94 | .get(path) |
diff --git a/server/tests/utils/videos/videos.ts b/server/tests/utils/videos/videos.ts index d1d8c07df..870dfd21f 100644 --- a/server/tests/utils/videos/videos.ts +++ b/server/tests/utils/videos/videos.ts | |||
@@ -186,13 +186,12 @@ function getAccountVideos (url: string, accessToken: string, accountId: number | | |||
186 | function getVideoChannelVideos ( | 186 | function getVideoChannelVideos ( |
187 | url: string, | 187 | url: string, |
188 | accessToken: string, | 188 | accessToken: string, |
189 | accountId: number | string, | ||
190 | videoChannelId: number | string, | 189 | videoChannelId: number | string, |
191 | start: number, | 190 | start: number, |
192 | count: number, | 191 | count: number, |
193 | sort?: string | 192 | sort?: string |
194 | ) { | 193 | ) { |
195 | const path = '/api/v1/accounts/' + accountId + '/video-channels/' + videoChannelId + '/videos' | 194 | const path = '/api/v1/video-channels/' + videoChannelId + '/videos' |
196 | 195 | ||
197 | return makeGetRequest({ | 196 | return makeGetRequest({ |
198 | url, | 197 | url, |
diff --git a/support/doc/api/html/index.html b/support/doc/api/html/index.html index 23162c307..d41fc3913 100644 --- a/support/doc/api/html/index.html +++ b/support/doc/api/html/index.html | |||
@@ -28,6 +28,9 @@ | |||
28 | <a href="#operation--accounts--id--get"> GET /accounts/{id} </a> | 28 | <a href="#operation--accounts--id--get"> GET /accounts/{id} </a> |
29 | </li> | 29 | </li> |
30 | <li> | 30 | <li> |
31 | <a href="#operation--accounts--id--videos-get"> GET /accounts/{id}/videos </a> | ||
32 | </li> | ||
33 | <li> | ||
31 | <a href="#operation--accounts-get"> GET /accounts </a> | 34 | <a href="#operation--accounts-get"> GET /accounts </a> |
32 | </li> | 35 | </li> |
33 | </ul> | 36 | </ul> |
@@ -187,19 +190,22 @@ | |||
187 | <a href="#operation--video-channels-get"> GET /video-channels </a> | 190 | <a href="#operation--video-channels-get"> GET /video-channels </a> |
188 | </li> | 191 | </li> |
189 | <li> | 192 | <li> |
190 | <a href="#operation--accounts--accountId--video-channels-get"> GET /accounts/{accountId}/video-channels </a> | 193 | <a href="#operation--video-channels-post"> POST /video-channels </a> |
191 | </li> | 194 | </li> |
192 | <li> | 195 | <li> |
193 | <a href="#operation--accounts--accountId--video-channels-post"> POST /accounts/{accountId}/video-channels </a> | 196 | <a href="#operation--video-channels--id--get"> GET /video-channels/{id} </a> |
194 | </li> | 197 | </li> |
195 | <li> | 198 | <li> |
196 | <a href="#operation--account--accountId--video-channels--id--get"> GET /account/{accountId}/video-channels/{id} </a> | 199 | <a href="#operation--video-channels--id--put"> PUT /video-channels/{id} </a> |
197 | </li> | 200 | </li> |
198 | <li> | 201 | <li> |
199 | <a href="#operation--account--accountId--video-channels--id--put"> PUT /account/{accountId}/video-channels/{id} </a> | 202 | <a href="#operation--video-channels--id--delete"> DELETE /video-channels/{id} </a> |
200 | </li> | 203 | </li> |
201 | <li> | 204 | <li> |
202 | <a href="#operation--account--accountId--video-channels--id--delete"> DELETE /account/{accountId}/video-channels/{id} </a> | 205 | <a href="#operation--video-channels--id--videos-get"> GET /video-channels/{id}/videos </a> |
206 | </li> | ||
207 | <li> | ||
208 | <a href="#operation--accounts--accountId--video-channels-get"> GET /accounts/{accountId}/video-channels </a> | ||
203 | </li> | 209 | </li> |
204 | </ul> | 210 | </ul> |
205 | </section> | 211 | </section> |
@@ -452,6 +458,117 @@ | |||
452 | </div> | 458 | </div> |
453 | </div> | 459 | </div> |
454 | </div> | 460 | </div> |
461 | <div id="operation--accounts--id--videos-get" class="operation panel" data-traverse-target="operation--accounts--id--videos-get"> | ||
462 | <!-- <section class="operation-tags row"> --> | ||
463 | <!-- <div class="doc-copy"> --> | ||
464 | <div class="operation-tags"> | ||
465 | <a class="label" href="#tag-Accounts">Accounts</a> | ||
466 | <!----> | ||
467 | </div> | ||
468 | <!-- </div> --> | ||
469 | <!-- </section> --> | ||
470 | <h2 class="operation-title"> | ||
471 | <span class="operation-name"> | ||
472 | <span class="operation-name">GET</span> | ||
473 | <span class="operation-path">/accounts/{id}/videos</span> | ||
474 | </span> | ||
475 | </h2> | ||
476 | <div class="doc-row"> | ||
477 | <div class="doc-copy"> | ||
478 | <section class="swagger-request-params"> | ||
479 | <div class="prop-row prop-group"> | ||
480 | <div class="prop-name"> | ||
481 | <div class="prop-title">id</div> | ||
482 | <span class="json-property-required"></span> | ||
483 | <div class="prop-subtitle"> in path </div> | ||
484 | <div class="prop-subtitle"> | ||
485 | <span class="json-property-type">string</span> | ||
486 | <span class="json-property-range" title="Value limits"></span> | ||
487 | </div> | ||
488 | </div> | ||
489 | <div class="prop-value"> | ||
490 | <p>The id of the account</p> | ||
491 | </div> | ||
492 | </div> | ||
493 | </section> | ||
494 | </div> | ||
495 | <div class="doc-examples"></div> | ||
496 | </div> | ||
497 | <div class="doc-row"> | ||
498 | <div class="doc-copy"> | ||
499 | <section class="swagger-responses"> | ||
500 | <div class="prop-row prop-group"> | ||
501 | <div class="prop-name"> | ||
502 | <div class="prop-title">200 OK</div> | ||
503 | <div class="prop-ref"> | ||
504 | <span class=""> | ||
505 | <a class="json-schema-ref" href="#/definitions/Video">Video</a> | ||
506 | </span> | ||
507 | </div> | ||
508 | <!-- <span class="swagger-global"></span> <span class="json-schema-reference"><a href=""></a></span> --> | ||
509 | </div> | ||
510 | <div class="prop-value"> | ||
511 | <p>successful operation</p> | ||
512 | </div> | ||
513 | </div> | ||
514 | </section> | ||
515 | </div> | ||
516 | <div class="doc-examples"> | ||
517 | <h5>Response Content-Types: | ||
518 | <span>application/json</span> | ||
519 | </h5> | ||
520 | <section> | ||
521 | <h5>Response Example | ||
522 | <span>(200 OK)</span> | ||
523 | </h5> | ||
524 | <!-- <div class="hljs"> --><pre><code class="hljs lang-json">{ | ||
525 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
526 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
527 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
528 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
529 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
530 | <span class="hljs-attr">"category"</span>: { | ||
531 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
532 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
533 | }, | ||
534 | <span class="hljs-attr">"licence"</span>: { | ||
535 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
536 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
537 | }, | ||
538 | <span class="hljs-attr">"language"</span>: { | ||
539 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
540 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
541 | }, | ||
542 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
543 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
544 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
545 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
546 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
547 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
548 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
549 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
550 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
551 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
552 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
553 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
554 | <span class="hljs-attr">"account"</span>: { | ||
555 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
556 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
557 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
558 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
559 | <span class="hljs-attr">"avatar"</span>: { | ||
560 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
561 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
562 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
563 | } | ||
564 | } | ||
565 | } | ||
566 | </code></pre> | ||
567 | <!-- </div> --> | ||
568 | </section> | ||
569 | </div> | ||
570 | </div> | ||
571 | </div> | ||
455 | <div id="operation--accounts-get" class="operation panel" data-traverse-target="operation--accounts-get"> | 572 | <div id="operation--accounts-get" class="operation panel" data-traverse-target="operation--accounts-get"> |
456 | <!-- <section class="operation-tags row"> --> | 573 | <!-- <section class="operation-tags row"> --> |
457 | <!-- <div class="doc-copy"> --> | 574 | <!-- <div class="doc-copy"> --> |
@@ -1596,54 +1713,10 @@ | |||
1596 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | 1713 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, |
1597 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | 1714 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, |
1598 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | 1715 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, |
1599 | <span class="hljs-attr">"owner"</span>: { | 1716 | <span class="hljs-attr">"ownerAccount"</span>: { |
1600 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | 1717 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, |
1601 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | 1718 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> |
1602 | }, | 1719 | } |
1603 | <span class="hljs-attr">"videos"</span>: [ | ||
1604 | { | ||
1605 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
1606 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
1607 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
1608 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
1609 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
1610 | <span class="hljs-attr">"category"</span>: { | ||
1611 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
1612 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
1613 | }, | ||
1614 | <span class="hljs-attr">"licence"</span>: { | ||
1615 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
1616 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
1617 | }, | ||
1618 | <span class="hljs-attr">"language"</span>: { | ||
1619 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
1620 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
1621 | }, | ||
1622 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
1623 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
1624 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
1625 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
1626 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
1627 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
1628 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
1629 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
1630 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
1631 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
1632 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
1633 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
1634 | <span class="hljs-attr">"account"</span>: { | ||
1635 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
1636 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
1637 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
1638 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
1639 | <span class="hljs-attr">"avatar"</span>: { | ||
1640 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
1641 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
1642 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
1643 | } | ||
1644 | } | ||
1645 | } | ||
1646 | ] | ||
1647 | } | 1720 | } |
1648 | ] | 1721 | ] |
1649 | } | 1722 | } |
@@ -1848,54 +1921,10 @@ | |||
1848 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | 1921 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, |
1849 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | 1922 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, |
1850 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | 1923 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, |
1851 | <span class="hljs-attr">"owner"</span>: { | 1924 | <span class="hljs-attr">"ownerAccount"</span>: { |
1852 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | 1925 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, |
1853 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | 1926 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> |
1854 | }, | 1927 | } |
1855 | <span class="hljs-attr">"videos"</span>: [ | ||
1856 | { | ||
1857 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
1858 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
1859 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
1860 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
1861 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
1862 | <span class="hljs-attr">"category"</span>: { | ||
1863 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
1864 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
1865 | }, | ||
1866 | <span class="hljs-attr">"licence"</span>: { | ||
1867 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
1868 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
1869 | }, | ||
1870 | <span class="hljs-attr">"language"</span>: { | ||
1871 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
1872 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
1873 | }, | ||
1874 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
1875 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
1876 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
1877 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
1878 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
1879 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
1880 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
1881 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
1882 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
1883 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
1884 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
1885 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
1886 | <span class="hljs-attr">"account"</span>: { | ||
1887 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
1888 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
1889 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
1890 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
1891 | <span class="hljs-attr">"avatar"</span>: { | ||
1892 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
1893 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
1894 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
1895 | } | ||
1896 | } | ||
1897 | } | ||
1898 | ] | ||
1899 | } | 1928 | } |
1900 | ] | 1929 | ] |
1901 | } | 1930 | } |
@@ -2125,54 +2154,10 @@ | |||
2125 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | 2154 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, |
2126 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | 2155 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, |
2127 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | 2156 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, |
2128 | <span class="hljs-attr">"owner"</span>: { | 2157 | <span class="hljs-attr">"ownerAccount"</span>: { |
2129 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | 2158 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, |
2130 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | 2159 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> |
2131 | }, | 2160 | } |
2132 | <span class="hljs-attr">"videos"</span>: [ | ||
2133 | { | ||
2134 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
2135 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
2136 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
2137 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
2138 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
2139 | <span class="hljs-attr">"category"</span>: { | ||
2140 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
2141 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
2142 | }, | ||
2143 | <span class="hljs-attr">"licence"</span>: { | ||
2144 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
2145 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
2146 | }, | ||
2147 | <span class="hljs-attr">"language"</span>: { | ||
2148 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
2149 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
2150 | }, | ||
2151 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
2152 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
2153 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
2154 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
2155 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
2156 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
2157 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
2158 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
2159 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
2160 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
2161 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
2162 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
2163 | <span class="hljs-attr">"account"</span>: { | ||
2164 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
2165 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
2166 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
2167 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
2168 | <span class="hljs-attr">"avatar"</span>: { | ||
2169 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
2170 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
2171 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
2172 | } | ||
2173 | } | ||
2174 | } | ||
2175 | ] | ||
2176 | } | 2161 | } |
2177 | ] | 2162 | ] |
2178 | } | 2163 | } |
@@ -4867,189 +4852,10 @@ | |||
4867 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | 4852 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, |
4868 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | 4853 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, |
4869 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | 4854 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, |
4870 | <span class="hljs-attr">"owner"</span>: { | 4855 | <span class="hljs-attr">"ownerAccount"</span>: { |
4871 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | 4856 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, |
4872 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | ||
4873 | }, | ||
4874 | <span class="hljs-attr">"videos"</span>: [ | ||
4875 | { | ||
4876 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
4877 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
4878 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
4879 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
4880 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
4881 | <span class="hljs-attr">"category"</span>: { | ||
4882 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
4883 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
4884 | }, | ||
4885 | <span class="hljs-attr">"licence"</span>: { | ||
4886 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
4887 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
4888 | }, | ||
4889 | <span class="hljs-attr">"language"</span>: { | ||
4890 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
4891 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
4892 | }, | ||
4893 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
4894 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
4895 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
4896 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
4897 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
4898 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
4899 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
4900 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
4901 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
4902 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
4903 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
4904 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
4905 | <span class="hljs-attr">"account"</span>: { | ||
4906 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
4907 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
4908 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
4909 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
4910 | <span class="hljs-attr">"avatar"</span>: { | ||
4911 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
4912 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
4913 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
4914 | } | ||
4915 | } | ||
4916 | } | ||
4917 | ] | ||
4918 | } | ||
4919 | ] | ||
4920 | </code></pre> | ||
4921 | <!-- </div> --> | ||
4922 | </section> | ||
4923 | </div> | ||
4924 | </div> | ||
4925 | </div> | ||
4926 | <div id="operation--accounts--accountId--video-channels-get" class="operation panel" data-traverse-target="operation--accounts--accountId--video-channels-get"> | ||
4927 | <!-- <section class="operation-tags row"> --> | ||
4928 | <!-- <div class="doc-copy"> --> | ||
4929 | <div class="operation-tags"> | ||
4930 | <a class="label" href="#tag-VideoChannel">VideoChannel</a> | ||
4931 | <!----> | ||
4932 | </div> | ||
4933 | <!-- </div> --> | ||
4934 | <!-- </section> --> | ||
4935 | <h2 class="operation-title"> | ||
4936 | <span class="operation-name"> | ||
4937 | <span class="operation-name">GET</span> | ||
4938 | <span class="operation-path">/accounts/{accountId}/video-channels</span> | ||
4939 | </span> | ||
4940 | </h2> | ||
4941 | <div class="doc-row"> | ||
4942 | <div class="doc-copy"> | ||
4943 | <section class="swagger-request-params"> | ||
4944 | <div class="prop-row prop-group"> | ||
4945 | <div class="prop-name"> | ||
4946 | <div class="prop-title">accountId</div> | ||
4947 | <span class="json-property-required"></span> | ||
4948 | <div class="prop-subtitle"> in path </div> | ||
4949 | <div class="prop-subtitle"> | ||
4950 | <span class="json-property-type">string</span> | ||
4951 | <span class="json-property-range" title="Value limits"></span> | ||
4952 | </div> | ||
4953 | </div> | ||
4954 | <div class="prop-value"> | ||
4955 | <p>The account id </p> | ||
4956 | </div> | ||
4957 | </div> | ||
4958 | </section> | ||
4959 | </div> | ||
4960 | <div class="doc-examples"></div> | ||
4961 | </div> | ||
4962 | <div class="doc-row"> | ||
4963 | <div class="doc-copy"> | ||
4964 | <section class="swagger-responses"> | ||
4965 | <div class="prop-row prop-group"> | ||
4966 | <div class="prop-name"> | ||
4967 | <div class="prop-title">200 OK</div> | ||
4968 | <div class="prop-ref"> | ||
4969 | <span class="json-schema-ref-array"> | ||
4970 | <a class="json-schema-ref" href="#/definitions/VideoChannel">VideoChannel</a> | ||
4971 | </span> | ||
4972 | </div> | ||
4973 | <!-- <span class="swagger-global"></span> <span class="json-schema-reference"><a href=""></a></span> --> | ||
4974 | </div> | ||
4975 | <div class="prop-value"> | ||
4976 | <p>successful operation</p> | ||
4977 | </div> | ||
4978 | </div> | ||
4979 | <div class="prop-row prop-inner"> | ||
4980 | <div class="prop-name">type</div> | ||
4981 | <div class="prop-value"> | ||
4982 | <span class="json-property-type"> | ||
4983 | <span class="json-schema-ref-array"> | ||
4984 | <a class="json-schema-ref" href="#/definitions/VideoChannel">VideoChannel</a> | ||
4985 | </span> | ||
4986 | </span> | ||
4987 | <span class="json-property-range" title="Value limits"></span> | ||
4988 | </div> | ||
4989 | </div> | ||
4990 | </section> | ||
4991 | </div> | ||
4992 | <div class="doc-examples"> | ||
4993 | <h5>Response Content-Types: | ||
4994 | <span>application/json</span> | ||
4995 | </h5> | ||
4996 | <section> | ||
4997 | <h5>Response Example | ||
4998 | <span>(200 OK)</span> | ||
4999 | </h5> | ||
5000 | <!-- <div class="hljs"> --><pre><code class="hljs lang-json">[ | ||
5001 | { | ||
5002 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
5003 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
5004 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
5005 | <span class="hljs-attr">"owner"</span>: { | ||
5006 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
5007 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | 4857 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> |
5008 | }, | 4858 | } |
5009 | <span class="hljs-attr">"videos"</span>: [ | ||
5010 | { | ||
5011 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5012 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
5013 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
5014 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
5015 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
5016 | <span class="hljs-attr">"category"</span>: { | ||
5017 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5018 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5019 | }, | ||
5020 | <span class="hljs-attr">"licence"</span>: { | ||
5021 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5022 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5023 | }, | ||
5024 | <span class="hljs-attr">"language"</span>: { | ||
5025 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
5026 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5027 | }, | ||
5028 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
5029 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
5030 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
5031 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
5032 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
5033 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
5034 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
5035 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
5036 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
5037 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
5038 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
5039 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
5040 | <span class="hljs-attr">"account"</span>: { | ||
5041 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
5042 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
5043 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
5044 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
5045 | <span class="hljs-attr">"avatar"</span>: { | ||
5046 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
5047 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
5048 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
5049 | } | ||
5050 | } | ||
5051 | } | ||
5052 | ] | ||
5053 | } | 4859 | } |
5054 | ] | 4860 | ] |
5055 | </code></pre> | 4861 | </code></pre> |
@@ -5058,7 +4864,7 @@ | |||
5058 | </div> | 4864 | </div> |
5059 | </div> | 4865 | </div> |
5060 | </div> | 4866 | </div> |
5061 | <div id="operation--accounts--accountId--video-channels-post" class="operation panel" data-traverse-target="operation--accounts--accountId--video-channels-post"> | 4867 | <div id="operation--video-channels-post" class="operation panel" data-traverse-target="operation--video-channels-post"> |
5062 | <!-- <section class="operation-tags row"> --> | 4868 | <!-- <section class="operation-tags row"> --> |
5063 | <!-- <div class="doc-copy"> --> | 4869 | <!-- <div class="doc-copy"> --> |
5064 | <div class="operation-tags"> | 4870 | <div class="operation-tags"> |
@@ -5070,7 +4876,7 @@ | |||
5070 | <h2 class="operation-title"> | 4876 | <h2 class="operation-title"> |
5071 | <span class="operation-name"> | 4877 | <span class="operation-name"> |
5072 | <span class="operation-name">POST</span> | 4878 | <span class="operation-name">POST</span> |
5073 | <span class="operation-path">/accounts/{accountId}/video-channels</span> | 4879 | <span class="operation-path">/video-channels</span> |
5074 | </span> | 4880 | </span> |
5075 | </h2> | 4881 | </h2> |
5076 | <div class="doc-row"> | 4882 | <div class="doc-row"> |
@@ -5091,22 +4897,6 @@ | |||
5091 | </div> | 4897 | </div> |
5092 | </div> | 4898 | </div> |
5093 | </section> | 4899 | </section> |
5094 | <section class="swagger-request-params"> | ||
5095 | <div class="prop-row prop-group"> | ||
5096 | <div class="prop-name"> | ||
5097 | <div class="prop-title">accountId</div> | ||
5098 | <span class="json-property-required"></span> | ||
5099 | <div class="prop-subtitle"> in path </div> | ||
5100 | <div class="prop-subtitle"> | ||
5101 | <span class="json-property-type">string</span> | ||
5102 | <span class="json-property-range" title="Value limits"></span> | ||
5103 | </div> | ||
5104 | </div> | ||
5105 | <div class="prop-value"> | ||
5106 | <p>The account id </p> | ||
5107 | </div> | ||
5108 | </div> | ||
5109 | </section> | ||
5110 | </div> | 4900 | </div> |
5111 | <div class="doc-examples"> | 4901 | <div class="doc-examples"> |
5112 | <section> | 4902 | <section> |
@@ -5165,7 +4955,7 @@ | |||
5165 | </div> | 4955 | </div> |
5166 | </div> | 4956 | </div> |
5167 | </div> | 4957 | </div> |
5168 | <div id="operation--account--accountId--video-channels--id--get" class="operation panel" data-traverse-target="operation--account--accountId--video-channels--id--get"> | 4958 | <div id="operation--video-channels--id--get" class="operation panel" data-traverse-target="operation--video-channels--id--get"> |
5169 | <!-- <section class="operation-tags row"> --> | 4959 | <!-- <section class="operation-tags row"> --> |
5170 | <!-- <div class="doc-copy"> --> | 4960 | <!-- <div class="doc-copy"> --> |
5171 | <div class="operation-tags"> | 4961 | <div class="operation-tags"> |
@@ -5177,7 +4967,7 @@ | |||
5177 | <h2 class="operation-title"> | 4967 | <h2 class="operation-title"> |
5178 | <span class="operation-name"> | 4968 | <span class="operation-name"> |
5179 | <span class="operation-name">GET</span> | 4969 | <span class="operation-name">GET</span> |
5180 | <span class="operation-path">/account/{accountId}/video-channels/{id}</span> | 4970 | <span class="operation-path">/video-channels/{id}</span> |
5181 | </span> | 4971 | </span> |
5182 | </h2> | 4972 | </h2> |
5183 | <div class="doc-row"> | 4973 | <div class="doc-row"> |
@@ -5185,20 +4975,6 @@ | |||
5185 | <section class="swagger-request-params"> | 4975 | <section class="swagger-request-params"> |
5186 | <div class="prop-row prop-group"> | 4976 | <div class="prop-row prop-group"> |
5187 | <div class="prop-name"> | 4977 | <div class="prop-name"> |
5188 | <div class="prop-title">accountId</div> | ||
5189 | <span class="json-property-required"></span> | ||
5190 | <div class="prop-subtitle"> in path </div> | ||
5191 | <div class="prop-subtitle"> | ||
5192 | <span class="json-property-type">string</span> | ||
5193 | <span class="json-property-range" title="Value limits"></span> | ||
5194 | </div> | ||
5195 | </div> | ||
5196 | <div class="prop-value"> | ||
5197 | <p>The account id </p> | ||
5198 | </div> | ||
5199 | </div> | ||
5200 | <div class="prop-row prop-group"> | ||
5201 | <div class="prop-name"> | ||
5202 | <div class="prop-title">id</div> | 4978 | <div class="prop-title">id</div> |
5203 | <span class="json-property-required"></span> | 4979 | <span class="json-property-required"></span> |
5204 | <div class="prop-subtitle"> in path </div> | 4980 | <div class="prop-subtitle"> in path </div> |
@@ -5246,54 +5022,10 @@ | |||
5246 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | 5022 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, |
5247 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | 5023 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, |
5248 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | 5024 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, |
5249 | <span class="hljs-attr">"owner"</span>: { | 5025 | <span class="hljs-attr">"ownerAccount"</span>: { |
5250 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | 5026 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, |
5251 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | 5027 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> |
5252 | }, | 5028 | } |
5253 | <span class="hljs-attr">"videos"</span>: [ | ||
5254 | { | ||
5255 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5256 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
5257 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
5258 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
5259 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
5260 | <span class="hljs-attr">"category"</span>: { | ||
5261 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5262 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5263 | }, | ||
5264 | <span class="hljs-attr">"licence"</span>: { | ||
5265 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5266 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5267 | }, | ||
5268 | <span class="hljs-attr">"language"</span>: { | ||
5269 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
5270 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5271 | }, | ||
5272 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
5273 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
5274 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
5275 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
5276 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
5277 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
5278 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
5279 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
5280 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
5281 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
5282 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
5283 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
5284 | <span class="hljs-attr">"account"</span>: { | ||
5285 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
5286 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
5287 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
5288 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
5289 | <span class="hljs-attr">"avatar"</span>: { | ||
5290 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
5291 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
5292 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
5293 | } | ||
5294 | } | ||
5295 | } | ||
5296 | ] | ||
5297 | } | 5029 | } |
5298 | </code></pre> | 5030 | </code></pre> |
5299 | <!-- </div> --> | 5031 | <!-- </div> --> |
@@ -5301,7 +5033,7 @@ | |||
5301 | </div> | 5033 | </div> |
5302 | </div> | 5034 | </div> |
5303 | </div> | 5035 | </div> |
5304 | <div id="operation--account--accountId--video-channels--id--put" class="operation panel" data-traverse-target="operation--account--accountId--video-channels--id--put"> | 5036 | <div id="operation--video-channels--id--put" class="operation panel" data-traverse-target="operation--video-channels--id--put"> |
5305 | <!-- <section class="operation-tags row"> --> | 5037 | <!-- <section class="operation-tags row"> --> |
5306 | <!-- <div class="doc-copy"> --> | 5038 | <!-- <div class="doc-copy"> --> |
5307 | <div class="operation-tags"> | 5039 | <div class="operation-tags"> |
@@ -5313,7 +5045,7 @@ | |||
5313 | <h2 class="operation-title"> | 5045 | <h2 class="operation-title"> |
5314 | <span class="operation-name"> | 5046 | <span class="operation-name"> |
5315 | <span class="operation-name">PUT</span> | 5047 | <span class="operation-name">PUT</span> |
5316 | <span class="operation-path">/account/{accountId}/video-channels/{id}</span> | 5048 | <span class="operation-path">/video-channels/{id}</span> |
5317 | </span> | 5049 | </span> |
5318 | </h2> | 5050 | </h2> |
5319 | <div class="doc-row"> | 5051 | <div class="doc-row"> |
@@ -5337,20 +5069,6 @@ | |||
5337 | <section class="swagger-request-params"> | 5069 | <section class="swagger-request-params"> |
5338 | <div class="prop-row prop-group"> | 5070 | <div class="prop-row prop-group"> |
5339 | <div class="prop-name"> | 5071 | <div class="prop-name"> |
5340 | <div class="prop-title">accountId</div> | ||
5341 | <span class="json-property-required"></span> | ||
5342 | <div class="prop-subtitle"> in path </div> | ||
5343 | <div class="prop-subtitle"> | ||
5344 | <span class="json-property-type">string</span> | ||
5345 | <span class="json-property-range" title="Value limits"></span> | ||
5346 | </div> | ||
5347 | </div> | ||
5348 | <div class="prop-value"> | ||
5349 | <p>The account id </p> | ||
5350 | </div> | ||
5351 | </div> | ||
5352 | <div class="prop-row prop-group"> | ||
5353 | <div class="prop-name"> | ||
5354 | <div class="prop-title">id</div> | 5072 | <div class="prop-title">id</div> |
5355 | <span class="json-property-required"></span> | 5073 | <span class="json-property-required"></span> |
5356 | <div class="prop-subtitle"> in path </div> | 5074 | <div class="prop-subtitle"> in path </div> |
@@ -5422,7 +5140,7 @@ | |||
5422 | </div> | 5140 | </div> |
5423 | </div> | 5141 | </div> |
5424 | </div> | 5142 | </div> |
5425 | <div id="operation--account--accountId--video-channels--id--delete" class="operation panel" data-traverse-target="operation--account--accountId--video-channels--id--delete"> | 5143 | <div id="operation--video-channels--id--delete" class="operation panel" data-traverse-target="operation--video-channels--id--delete"> |
5426 | <!-- <section class="operation-tags row"> --> | 5144 | <!-- <section class="operation-tags row"> --> |
5427 | <!-- <div class="doc-copy"> --> | 5145 | <!-- <div class="doc-copy"> --> |
5428 | <div class="operation-tags"> | 5146 | <div class="operation-tags"> |
@@ -5434,7 +5152,7 @@ | |||
5434 | <h2 class="operation-title"> | 5152 | <h2 class="operation-title"> |
5435 | <span class="operation-name"> | 5153 | <span class="operation-name"> |
5436 | <span class="operation-name">DELETE</span> | 5154 | <span class="operation-name">DELETE</span> |
5437 | <span class="operation-path">/account/{accountId}/video-channels/{id}</span> | 5155 | <span class="operation-path">/video-channels/{id}</span> |
5438 | </span> | 5156 | </span> |
5439 | </h2> | 5157 | </h2> |
5440 | <div class="doc-row"> | 5158 | <div class="doc-row"> |
@@ -5442,20 +5160,6 @@ | |||
5442 | <section class="swagger-request-params"> | 5160 | <section class="swagger-request-params"> |
5443 | <div class="prop-row prop-group"> | 5161 | <div class="prop-row prop-group"> |
5444 | <div class="prop-name"> | 5162 | <div class="prop-name"> |
5445 | <div class="prop-title">accountId</div> | ||
5446 | <span class="json-property-required"></span> | ||
5447 | <div class="prop-subtitle"> in path </div> | ||
5448 | <div class="prop-subtitle"> | ||
5449 | <span class="json-property-type">string</span> | ||
5450 | <span class="json-property-range" title="Value limits"></span> | ||
5451 | </div> | ||
5452 | </div> | ||
5453 | <div class="prop-value"> | ||
5454 | <p>The account id </p> | ||
5455 | </div> | ||
5456 | </div> | ||
5457 | <div class="prop-row prop-group"> | ||
5458 | <div class="prop-name"> | ||
5459 | <div class="prop-title">id</div> | 5163 | <div class="prop-title">id</div> |
5460 | <span class="json-property-required"></span> | 5164 | <span class="json-property-required"></span> |
5461 | <div class="prop-subtitle"> in path </div> | 5165 | <div class="prop-subtitle"> in path </div> |
@@ -5514,6 +5218,208 @@ | |||
5514 | </div> | 5218 | </div> |
5515 | </div> | 5219 | </div> |
5516 | </div> | 5220 | </div> |
5221 | <div id="operation--video-channels--id--videos-get" class="operation panel" data-traverse-target="operation--video-channels--id--videos-get"> | ||
5222 | <!-- <section class="operation-tags row"> --> | ||
5223 | <!-- <div class="doc-copy"> --> | ||
5224 | <div class="operation-tags"> | ||
5225 | <a class="label" href="#tag-VideoChannel">VideoChannel</a> | ||
5226 | <!----> | ||
5227 | </div> | ||
5228 | <!-- </div> --> | ||
5229 | <!-- </section> --> | ||
5230 | <h2 class="operation-title"> | ||
5231 | <span class="operation-name"> | ||
5232 | <span class="operation-name">GET</span> | ||
5233 | <span class="operation-path">/video-channels/{id}/videos</span> | ||
5234 | </span> | ||
5235 | </h2> | ||
5236 | <div class="doc-row"> | ||
5237 | <div class="doc-copy"> | ||
5238 | <section class="swagger-request-params"> | ||
5239 | <div class="prop-row prop-group"> | ||
5240 | <div class="prop-name"> | ||
5241 | <div class="prop-title">id</div> | ||
5242 | <span class="json-property-required"></span> | ||
5243 | <div class="prop-subtitle"> in path </div> | ||
5244 | <div class="prop-subtitle"> | ||
5245 | <span class="json-property-type">string</span> | ||
5246 | <span class="json-property-range" title="Value limits"></span> | ||
5247 | </div> | ||
5248 | </div> | ||
5249 | <div class="prop-value"> | ||
5250 | <p>The video channel id </p> | ||
5251 | </div> | ||
5252 | </div> | ||
5253 | </section> | ||
5254 | </div> | ||
5255 | <div class="doc-examples"></div> | ||
5256 | </div> | ||
5257 | <div class="doc-row"> | ||
5258 | <div class="doc-copy"> | ||
5259 | <section class="swagger-responses"> | ||
5260 | <div class="prop-row prop-group"> | ||
5261 | <div class="prop-name"> | ||
5262 | <div class="prop-title">200 OK</div> | ||
5263 | <div class="prop-ref"> | ||
5264 | <span class=""> | ||
5265 | <a class="json-schema-ref" href="#/definitions/Video">Video</a> | ||
5266 | </span> | ||
5267 | </div> | ||
5268 | <!-- <span class="swagger-global"></span> <span class="json-schema-reference"><a href=""></a></span> --> | ||
5269 | </div> | ||
5270 | <div class="prop-value"> | ||
5271 | <p>successful operation</p> | ||
5272 | </div> | ||
5273 | </div> | ||
5274 | </section> | ||
5275 | </div> | ||
5276 | <div class="doc-examples"> | ||
5277 | <h5>Response Content-Types: | ||
5278 | <span>application/json</span> | ||
5279 | </h5> | ||
5280 | <section> | ||
5281 | <h5>Response Example | ||
5282 | <span>(200 OK)</span> | ||
5283 | </h5> | ||
5284 | <!-- <div class="hljs"> --><pre><code class="hljs lang-json">{ | ||
5285 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5286 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
5287 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
5288 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
5289 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
5290 | <span class="hljs-attr">"category"</span>: { | ||
5291 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5292 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5293 | }, | ||
5294 | <span class="hljs-attr">"licence"</span>: { | ||
5295 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5296 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5297 | }, | ||
5298 | <span class="hljs-attr">"language"</span>: { | ||
5299 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
5300 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
5301 | }, | ||
5302 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
5303 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
5304 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
5305 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
5306 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
5307 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
5308 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
5309 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
5310 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
5311 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
5312 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
5313 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
5314 | <span class="hljs-attr">"account"</span>: { | ||
5315 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
5316 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
5317 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
5318 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
5319 | <span class="hljs-attr">"avatar"</span>: { | ||
5320 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
5321 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
5322 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
5323 | } | ||
5324 | } | ||
5325 | } | ||
5326 | </code></pre> | ||
5327 | <!-- </div> --> | ||
5328 | </section> | ||
5329 | </div> | ||
5330 | </div> | ||
5331 | </div> | ||
5332 | <div id="operation--accounts--accountId--video-channels-get" class="operation panel" data-traverse-target="operation--accounts--accountId--video-channels-get"> | ||
5333 | <!-- <section class="operation-tags row"> --> | ||
5334 | <!-- <div class="doc-copy"> --> | ||
5335 | <div class="operation-tags"> | ||
5336 | <a class="label" href="#tag-VideoChannel">VideoChannel</a> | ||
5337 | <!----> | ||
5338 | </div> | ||
5339 | <!-- </div> --> | ||
5340 | <!-- </section> --> | ||
5341 | <h2 class="operation-title"> | ||
5342 | <span class="operation-name"> | ||
5343 | <span class="operation-name">GET</span> | ||
5344 | <span class="operation-path">/accounts/{accountId}/video-channels</span> | ||
5345 | </span> | ||
5346 | </h2> | ||
5347 | <div class="doc-row"> | ||
5348 | <div class="doc-copy"> | ||
5349 | <section class="swagger-request-params"> | ||
5350 | <div class="prop-row prop-group"> | ||
5351 | <div class="prop-name"> | ||
5352 | <div class="prop-title">accountId</div> | ||
5353 | <span class="json-property-required"></span> | ||
5354 | <div class="prop-subtitle"> in path </div> | ||
5355 | <div class="prop-subtitle"> | ||
5356 | <span class="json-property-type">string</span> | ||
5357 | <span class="json-property-range" title="Value limits"></span> | ||
5358 | </div> | ||
5359 | </div> | ||
5360 | <div class="prop-value"> | ||
5361 | <p>The account id </p> | ||
5362 | </div> | ||
5363 | </div> | ||
5364 | </section> | ||
5365 | </div> | ||
5366 | <div class="doc-examples"></div> | ||
5367 | </div> | ||
5368 | <div class="doc-row"> | ||
5369 | <div class="doc-copy"> | ||
5370 | <section class="swagger-responses"> | ||
5371 | <div class="prop-row prop-group"> | ||
5372 | <div class="prop-name"> | ||
5373 | <div class="prop-title">200 OK</div> | ||
5374 | <div class="prop-ref"> | ||
5375 | <span class="json-schema-ref-array"> | ||
5376 | <a class="json-schema-ref" href="#/definitions/VideoChannel">VideoChannel</a> | ||
5377 | </span> | ||
5378 | </div> | ||
5379 | <!-- <span class="swagger-global"></span> <span class="json-schema-reference"><a href=""></a></span> --> | ||
5380 | </div> | ||
5381 | <div class="prop-value"> | ||
5382 | <p>successful operation</p> | ||
5383 | </div> | ||
5384 | </div> | ||
5385 | <div class="prop-row prop-inner"> | ||
5386 | <div class="prop-name">type</div> | ||
5387 | <div class="prop-value"> | ||
5388 | <span class="json-property-type"> | ||
5389 | <span class="json-schema-ref-array"> | ||
5390 | <a class="json-schema-ref" href="#/definitions/VideoChannel">VideoChannel</a> | ||
5391 | </span> | ||
5392 | </span> | ||
5393 | <span class="json-property-range" title="Value limits"></span> | ||
5394 | </div> | ||
5395 | </div> | ||
5396 | </section> | ||
5397 | </div> | ||
5398 | <div class="doc-examples"> | ||
5399 | <h5>Response Content-Types: | ||
5400 | <span>application/json</span> | ||
5401 | </h5> | ||
5402 | <section> | ||
5403 | <h5>Response Example | ||
5404 | <span>(200 OK)</span> | ||
5405 | </h5> | ||
5406 | <!-- <div class="hljs"> --><pre><code class="hljs lang-json">[ | ||
5407 | { | ||
5408 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
5409 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
5410 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
5411 | <span class="hljs-attr">"ownerAccount"</span>: { | ||
5412 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
5413 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | ||
5414 | } | ||
5415 | } | ||
5416 | ] | ||
5417 | </code></pre> | ||
5418 | <!-- </div> --> | ||
5419 | </section> | ||
5420 | </div> | ||
5421 | </div> | ||
5422 | </div> | ||
5517 | <h1 id="tag-VideoComment" class="swagger-summary-tag" data-traverse-target="tag-VideoComment">VideoComment</h1> | 5423 | <h1 id="tag-VideoComment" class="swagger-summary-tag" data-traverse-target="tag-VideoComment">VideoComment</h1> |
5518 | <div id="operation--videos--videoId--comment-threads-get" class="operation panel" data-traverse-target="operation--videos--videoId--comment-threads-get"> | 5424 | <div id="operation--videos--videoId--comment-threads-get" class="operation panel" data-traverse-target="operation--videos--videoId--comment-threads-get"> |
5519 | <!-- <section class="operation-tags row"> --> | 5425 | <!-- <section class="operation-tags row"> --> |
@@ -6760,20 +6666,11 @@ | |||
6760 | <span class="json-property-type">boolean</span> | 6666 | <span class="json-property-type">boolean</span> |
6761 | <span class="json-property-range" title="Value limits"></span> | 6667 | <span class="json-property-range" title="Value limits"></span> |
6762 | </dt> | 6668 | </dt> |
6763 | <dt data-property-name="owner"> | 6669 | <dt data-property-name="ownerAccount"> |
6764 | <span class="json-property-name">owner:</span> | 6670 | <span class="json-property-name">ownerAccount:</span> |
6765 | <span class="json-property-type">object</span> | 6671 | <span class="json-property-type">object</span> |
6766 | <span class="json-property-range" title="Value limits"></span> | 6672 | <span class="json-property-range" title="Value limits"></span> |
6767 | </dt> | 6673 | </dt> |
6768 | <dt data-property-name="videos"> | ||
6769 | <span class="json-property-name">videos:</span> | ||
6770 | <span class="json-property-type"> | ||
6771 | <span class="json-schema-ref-array"> | ||
6772 | <a class="json-schema-ref" href="#/definitions/Video">Video</a> | ||
6773 | </span> | ||
6774 | </span> | ||
6775 | <span class="json-property-range" title="Value limits"></span> | ||
6776 | </dt> | ||
6777 | </dl> | 6674 | </dl> |
6778 | </section> | 6675 | </section> |
6779 | </div> | 6676 | </div> |
@@ -6784,54 +6681,10 @@ | |||
6784 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | 6681 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, |
6785 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | 6682 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, |
6786 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | 6683 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, |
6787 | <span class="hljs-attr">"owner"</span>: { | 6684 | <span class="hljs-attr">"ownerAccount"</span>: { |
6788 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | 6685 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, |
6789 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | 6686 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> |
6790 | }, | 6687 | } |
6791 | <span class="hljs-attr">"videos"</span>: [ | ||
6792 | { | ||
6793 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
6794 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
6795 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
6796 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
6797 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
6798 | <span class="hljs-attr">"category"</span>: { | ||
6799 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
6800 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
6801 | }, | ||
6802 | <span class="hljs-attr">"licence"</span>: { | ||
6803 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
6804 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
6805 | }, | ||
6806 | <span class="hljs-attr">"language"</span>: { | ||
6807 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
6808 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
6809 | }, | ||
6810 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
6811 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
6812 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
6813 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
6814 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
6815 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
6816 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
6817 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
6818 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
6819 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
6820 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
6821 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
6822 | <span class="hljs-attr">"account"</span>: { | ||
6823 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
6824 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
6825 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
6826 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
6827 | <span class="hljs-attr">"avatar"</span>: { | ||
6828 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
6829 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
6830 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
6831 | } | ||
6832 | } | ||
6833 | } | ||
6834 | ] | ||
6835 | } | 6688 | } |
6836 | </code></pre> | 6689 | </code></pre> |
6837 | <!-- </div> --> | 6690 | <!-- </div> --> |
@@ -7394,54 +7247,10 @@ | |||
7394 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | 7247 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, |
7395 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | 7248 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, |
7396 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | 7249 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, |
7397 | <span class="hljs-attr">"owner"</span>: { | 7250 | <span class="hljs-attr">"ownerAccount"</span>: { |
7398 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | 7251 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, |
7399 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> | 7252 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span> |
7400 | }, | 7253 | } |
7401 | <span class="hljs-attr">"videos"</span>: [ | ||
7402 | { | ||
7403 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
7404 | <span class="hljs-attr">"uuid"</span>: <span class="hljs-string">"string"</span>, | ||
7405 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
7406 | <span class="hljs-attr">"publishedAt"</span>: <span class="hljs-string">"string"</span>, | ||
7407 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>, | ||
7408 | <span class="hljs-attr">"category"</span>: { | ||
7409 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
7410 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
7411 | }, | ||
7412 | <span class="hljs-attr">"licence"</span>: { | ||
7413 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"number"</span>, | ||
7414 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
7415 | }, | ||
7416 | <span class="hljs-attr">"language"</span>: { | ||
7417 | <span class="hljs-attr">"id"</span>: <span class="hljs-string">"string"</span>, | ||
7418 | <span class="hljs-attr">"label"</span>: <span class="hljs-string">"string"</span> | ||
7419 | }, | ||
7420 | <span class="hljs-attr">"privacy"</span>: <span class="hljs-string">"string"</span>, | ||
7421 | <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, | ||
7422 | <span class="hljs-attr">"duration"</span>: <span class="hljs-string">"number"</span>, | ||
7423 | <span class="hljs-attr">"isLocal"</span>: <span class="hljs-string">"boolean"</span>, | ||
7424 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
7425 | <span class="hljs-attr">"thumbnailPath"</span>: <span class="hljs-string">"string"</span>, | ||
7426 | <span class="hljs-attr">"previewPath"</span>: <span class="hljs-string">"string"</span>, | ||
7427 | <span class="hljs-attr">"embedPath"</span>: <span class="hljs-string">"string"</span>, | ||
7428 | <span class="hljs-attr">"views"</span>: <span class="hljs-string">"number"</span>, | ||
7429 | <span class="hljs-attr">"likes"</span>: <span class="hljs-string">"number"</span>, | ||
7430 | <span class="hljs-attr">"dislikes"</span>: <span class="hljs-string">"number"</span>, | ||
7431 | <span class="hljs-attr">"nsfw"</span>: <span class="hljs-string">"boolean"</span>, | ||
7432 | <span class="hljs-attr">"account"</span>: { | ||
7433 | <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, | ||
7434 | <span class="hljs-attr">"displayName"</span>: <span class="hljs-string">"string"</span>, | ||
7435 | <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, | ||
7436 | <span class="hljs-attr">"host"</span>: <span class="hljs-string">"string"</span>, | ||
7437 | <span class="hljs-attr">"avatar"</span>: { | ||
7438 | <span class="hljs-attr">"path"</span>: <span class="hljs-string">"string"</span>, | ||
7439 | <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, | ||
7440 | <span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span> | ||
7441 | } | ||
7442 | } | ||
7443 | } | ||
7444 | ] | ||
7445 | } | 7254 | } |
7446 | ] | 7255 | ] |
7447 | } | 7256 | } |
diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index 56941031b..46b73145a 100644 --- a/support/doc/api/openapi.yaml +++ b/support/doc/api/openapi.yaml | |||
@@ -1017,27 +1017,6 @@ paths: | |||
1017 | type: array | 1017 | type: array |
1018 | items: | 1018 | items: |
1019 | $ref: '#/definitions/VideoChannel' | 1019 | $ref: '#/definitions/VideoChannel' |
1020 | /accounts/{accountId}/video-channels: | ||
1021 | get: | ||
1022 | tags: | ||
1023 | - VideoChannel | ||
1024 | consumes: | ||
1025 | - application/json | ||
1026 | produces: | ||
1027 | - application/json | ||
1028 | parameters: | ||
1029 | - name: accountId | ||
1030 | in: path | ||
1031 | required: true | ||
1032 | type: string | ||
1033 | description: 'The account id ' | ||
1034 | responses: | ||
1035 | '200': | ||
1036 | description: successful operation | ||
1037 | schema: | ||
1038 | type: array | ||
1039 | items: | ||
1040 | $ref: '#/definitions/VideoChannel' | ||
1041 | post: | 1020 | post: |
1042 | security: | 1021 | security: |
1043 | - OAuth2: [ ] | 1022 | - OAuth2: [ ] |
@@ -1048,11 +1027,6 @@ paths: | |||
1048 | produces: | 1027 | produces: |
1049 | - application/json | 1028 | - application/json |
1050 | parameters: | 1029 | parameters: |
1051 | - name: accountId | ||
1052 | in: path | ||
1053 | required: true | ||
1054 | type: string | ||
1055 | description: 'The account id ' | ||
1056 | - in: body | 1030 | - in: body |
1057 | name: body | 1031 | name: body |
1058 | schema: | 1032 | schema: |
@@ -1060,7 +1034,7 @@ paths: | |||
1060 | responses: | 1034 | responses: |
1061 | '204': | 1035 | '204': |
1062 | description: successful operation | 1036 | description: successful operation |
1063 | "/account/{accountId}/video-channels/{id}": | 1037 | "/video-channels/{id}": |
1064 | get: | 1038 | get: |
1065 | tags: | 1039 | tags: |
1066 | - VideoChannel | 1040 | - VideoChannel |
@@ -1069,11 +1043,6 @@ paths: | |||
1069 | produces: | 1043 | produces: |
1070 | - application/json | 1044 | - application/json |
1071 | parameters: | 1045 | parameters: |
1072 | - name: accountId | ||
1073 | in: path | ||
1074 | required: true | ||
1075 | type: string | ||
1076 | description: 'The account id ' | ||
1077 | - name: id | 1046 | - name: id |
1078 | in: path | 1047 | in: path |
1079 | required: true | 1048 | required: true |
@@ -1094,11 +1063,6 @@ paths: | |||
1094 | produces: | 1063 | produces: |
1095 | - application/json | 1064 | - application/json |
1096 | parameters: | 1065 | parameters: |
1097 | - name: accountId | ||
1098 | in: path | ||
1099 | required: true | ||
1100 | type: string | ||
1101 | description: 'The account id ' | ||
1102 | - name: id | 1066 | - name: id |
1103 | in: path | 1067 | in: path |
1104 | required: true | 1068 | required: true |
@@ -1121,20 +1085,34 @@ paths: | |||
1121 | produces: | 1085 | produces: |
1122 | - application/json | 1086 | - application/json |
1123 | parameters: | 1087 | parameters: |
1124 | - name: accountId | 1088 | - name: id |
1125 | in: path | 1089 | in: path |
1126 | required: true | 1090 | required: true |
1127 | type: string | 1091 | type: string |
1128 | description: 'The account id ' | 1092 | description: 'The video channel id ' |
1093 | responses: | ||
1094 | '204': | ||
1095 | description: successful operation | ||
1096 | "/video-channels/{id}/videos": | ||
1097 | get: | ||
1098 | tags: | ||
1099 | - VideoChannel | ||
1100 | consumes: | ||
1101 | - application/json | ||
1102 | produces: | ||
1103 | - application/json | ||
1104 | parameters: | ||
1129 | - name: id | 1105 | - name: id |
1130 | in: path | 1106 | in: path |
1131 | required: true | 1107 | required: true |
1132 | type: string | 1108 | type: string |
1133 | description: 'The video channel id ' | 1109 | description: 'The video channel id ' |
1134 | responses: | 1110 | responses: |
1135 | '204': | 1111 | '200': |
1136 | description: successful operation | 1112 | description: successful operation |
1137 | "/account/{accountId}/video-channels/{id}/videos": | 1113 | schema: |
1114 | $ref: '#/definitions/Video' | ||
1115 | /accounts/{accountId}/video-channels: | ||
1138 | get: | 1116 | get: |
1139 | tags: | 1117 | tags: |
1140 | - VideoChannel | 1118 | - VideoChannel |
@@ -1148,16 +1126,13 @@ paths: | |||
1148 | required: true | 1126 | required: true |
1149 | type: string | 1127 | type: string |
1150 | description: 'The account id ' | 1128 | description: 'The account id ' |
1151 | - name: id | ||
1152 | in: path | ||
1153 | required: true | ||
1154 | type: string | ||
1155 | description: 'The video channel id ' | ||
1156 | responses: | 1129 | responses: |
1157 | '200': | 1130 | '200': |
1158 | description: successful operation | 1131 | description: successful operation |
1159 | schema: | 1132 | schema: |
1160 | $ref: '#/definitions/Video' | 1133 | type: array |
1134 | items: | ||
1135 | $ref: '#/definitions/VideoChannel' | ||
1161 | "/videos/{videoId}/comment-threads": | 1136 | "/videos/{videoId}/comment-threads": |
1162 | get: | 1137 | get: |
1163 | tags: | 1138 | tags: |