diff options
Diffstat (limited to 'server/models/video/video-channel.ts')
-rw-r--r-- | server/models/video/video-channel.ts | 113 |
1 files changed, 31 insertions, 82 deletions
diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts index 9b545a4ef..068c8029d 100644 --- a/server/models/video/video-channel.ts +++ b/server/models/video/video-channel.ts | |||
@@ -11,7 +11,7 @@ import { | |||
11 | HasMany, | 11 | HasMany, |
12 | Is, | 12 | Is, |
13 | IsUUID, | 13 | IsUUID, |
14 | Model, | 14 | Model, Scopes, |
15 | Table, | 15 | Table, |
16 | UpdatedAt | 16 | UpdatedAt |
17 | } from 'sequelize-typescript' | 17 | } from 'sequelize-typescript' |
@@ -28,6 +28,26 @@ import { getSort, throwIfNotValid } from '../utils' | |||
28 | import { VideoModel } from './video' | 28 | import { VideoModel } from './video' |
29 | import { VideoChannelShareModel } from './video-channel-share' | 29 | import { VideoChannelShareModel } from './video-channel-share' |
30 | 30 | ||
31 | enum ScopeNames { | ||
32 | WITH_ACCOUNT = 'WITH_ACCOUNT', | ||
33 | WITH_VIDEOS = 'WITH_VIDEOS' | ||
34 | } | ||
35 | |||
36 | @Scopes({ | ||
37 | [ScopeNames.WITH_ACCOUNT]: { | ||
38 | include: [ | ||
39 | { | ||
40 | model: () => AccountModel, | ||
41 | include: [ { model: () => ServerModel, required: false } ] | ||
42 | } | ||
43 | ] | ||
44 | }, | ||
45 | [ScopeNames.WITH_VIDEOS]: { | ||
46 | include: [ | ||
47 | () => VideoModel | ||
48 | ] | ||
49 | } | ||
50 | }) | ||
31 | @Table({ | 51 | @Table({ |
32 | tableName: 'videoChannel', | 52 | tableName: 'videoChannel', |
33 | indexes: [ | 53 | indexes: [ |
@@ -122,17 +142,10 @@ export class VideoChannelModel extends Model<VideoChannelModel> { | |||
122 | const query = { | 142 | const query = { |
123 | offset: start, | 143 | offset: start, |
124 | limit: count, | 144 | limit: count, |
125 | order: [ getSort(sort) ], | 145 | order: [ getSort(sort) ] |
126 | include: [ | ||
127 | { | ||
128 | model: AccountModel, | ||
129 | required: true, | ||
130 | include: [ { model: ServerModel, required: false } ] | ||
131 | } | ||
132 | ] | ||
133 | } | 146 | } |
134 | 147 | ||
135 | return VideoChannelModel.findAndCountAll(query) | 148 | return VideoChannelModel.scope(ScopeNames.WITH_ACCOUNT).findAndCountAll(query) |
136 | .then(({ rows, count }) => { | 149 | .then(({ rows, count }) => { |
137 | return { total: count, data: rows } | 150 | return { total: count, data: rows } |
138 | }) | 151 | }) |
@@ -159,29 +172,16 @@ export class VideoChannelModel extends Model<VideoChannelModel> { | |||
159 | }) | 172 | }) |
160 | } | 173 | } |
161 | 174 | ||
162 | static loadByUUID (uuid: string, t?: Sequelize.Transaction) { | ||
163 | const query: IFindOptions<VideoChannelModel> = { | ||
164 | where: { | ||
165 | uuid | ||
166 | } | ||
167 | } | ||
168 | |||
169 | if (t !== undefined) query.transaction = t | ||
170 | |||
171 | return VideoChannelModel.findOne(query) | ||
172 | } | ||
173 | |||
174 | static loadByUrl (url: string, t?: Sequelize.Transaction) { | 175 | static loadByUrl (url: string, t?: Sequelize.Transaction) { |
175 | const query: IFindOptions<VideoChannelModel> = { | 176 | const query: IFindOptions<VideoChannelModel> = { |
176 | where: { | 177 | where: { |
177 | url | 178 | url |
178 | }, | 179 | } |
179 | include: [ AccountModel ] | ||
180 | } | 180 | } |
181 | 181 | ||
182 | if (t !== undefined) query.transaction = t | 182 | if (t !== undefined) query.transaction = t |
183 | 183 | ||
184 | return VideoChannelModel.findOne(query) | 184 | return VideoChannelModel.scope(ScopeNames.WITH_ACCOUNT).findOne(query) |
185 | } | 185 | } |
186 | 186 | ||
187 | static loadByUUIDOrUrl (uuid: string, url: string, t?: Sequelize.Transaction) { | 187 | static loadByUUIDOrUrl (uuid: string, url: string, t?: Sequelize.Transaction) { |
@@ -199,90 +199,39 @@ export class VideoChannelModel extends Model<VideoChannelModel> { | |||
199 | return VideoChannelModel.findOne(query) | 199 | return VideoChannelModel.findOne(query) |
200 | } | 200 | } |
201 | 201 | ||
202 | static loadByHostAndUUID (fromHost: string, uuid: string, t?: Sequelize.Transaction) { | ||
203 | const query: IFindOptions<VideoChannelModel> = { | ||
204 | where: { | ||
205 | uuid | ||
206 | }, | ||
207 | include: [ | ||
208 | { | ||
209 | model: AccountModel, | ||
210 | include: [ | ||
211 | { | ||
212 | model: ServerModel, | ||
213 | required: true, | ||
214 | where: { | ||
215 | host: fromHost | ||
216 | } | ||
217 | } | ||
218 | ] | ||
219 | } | ||
220 | ] | ||
221 | } | ||
222 | |||
223 | if (t !== undefined) query.transaction = t | ||
224 | |||
225 | return VideoChannelModel.findOne(query) | ||
226 | } | ||
227 | |||
228 | static loadByIdAndAccount (id: number, accountId: number) { | 202 | static loadByIdAndAccount (id: number, accountId: number) { |
229 | const options = { | 203 | const options = { |
230 | where: { | 204 | where: { |
231 | id, | 205 | id, |
232 | accountId | 206 | accountId |
233 | }, | 207 | } |
234 | include: [ | ||
235 | { | ||
236 | model: AccountModel, | ||
237 | include: [ { model: ServerModel, required: false } ] | ||
238 | } | ||
239 | ] | ||
240 | } | 208 | } |
241 | 209 | ||
242 | return VideoChannelModel.findOne(options) | 210 | return VideoChannelModel.scope(ScopeNames.WITH_ACCOUNT).findOne(options) |
243 | } | 211 | } |
244 | 212 | ||
245 | static loadAndPopulateAccount (id: number) { | 213 | static loadAndPopulateAccount (id: number) { |
246 | const options = { | 214 | return VideoChannelModel.scope(ScopeNames.WITH_ACCOUNT).findById(id) |
247 | include: [ | ||
248 | { | ||
249 | model: AccountModel, | ||
250 | include: [ { model: ServerModel, required: false } ] | ||
251 | } | ||
252 | ] | ||
253 | } | ||
254 | |||
255 | return VideoChannelModel.findById(id, options) | ||
256 | } | 215 | } |
257 | 216 | ||
258 | static loadByUUIDAndPopulateAccount (uuid: string) { | 217 | static loadByUUIDAndPopulateAccount (uuid: string) { |
259 | const options = { | 218 | const options = { |
260 | where: { | 219 | where: { |
261 | uuid | 220 | uuid |
262 | }, | 221 | } |
263 | include: [ | ||
264 | { | ||
265 | model: AccountModel, | ||
266 | include: [ { model: ServerModel, required: false } ] | ||
267 | } | ||
268 | ] | ||
269 | } | 222 | } |
270 | 223 | ||
271 | return VideoChannelModel.findOne(options) | 224 | return VideoChannelModel.scope(ScopeNames.WITH_ACCOUNT).findOne(options) |
272 | } | 225 | } |
273 | 226 | ||
274 | static loadAndPopulateAccountAndVideos (id: number) { | 227 | static loadAndPopulateAccountAndVideos (id: number) { |
275 | const options = { | 228 | const options = { |
276 | include: [ | 229 | include: [ |
277 | { | ||
278 | model: AccountModel, | ||
279 | include: [ { model: ServerModel, required: false } ] | ||
280 | }, | ||
281 | VideoModel | 230 | VideoModel |
282 | ] | 231 | ] |
283 | } | 232 | } |
284 | 233 | ||
285 | return VideoChannelModel.findById(id, options) | 234 | return VideoChannelModel.scope([ ScopeNames.WITH_ACCOUNT, ScopeNames.WITH_VIDEOS ]).findById(id, options) |
286 | } | 235 | } |
287 | 236 | ||
288 | isOwned () { | 237 | isOwned () { |