aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/user/user.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/models/user/user.ts')
-rw-r--r--server/models/user/user.ts43
1 files changed, 15 insertions, 28 deletions
diff --git a/server/models/user/user.ts b/server/models/user/user.ts
index 7a21dbefa..0dc52d3cf 100644
--- a/server/models/user/user.ts
+++ b/server/models/user/user.ts
@@ -12,7 +12,6 @@ import {
12 isUserDisplayNSFWValid, 12 isUserDisplayNSFWValid,
13 isUserVideoQuotaValid 13 isUserVideoQuotaValid
14} from '../../helpers' 14} from '../../helpers'
15import { VideoResolution } from '../../../shared'
16 15
17import { addMethodsToModel } from '../utils' 16import { addMethodsToModel } from '../utils'
18import { 17import {
@@ -243,33 +242,21 @@ loadByUsernameOrEmail = function (username: string, email: string) {
243// --------------------------------------------------------------------------- 242// ---------------------------------------------------------------------------
244 243
245function getOriginalVideoFileTotalFromUser (user: UserInstance) { 244function getOriginalVideoFileTotalFromUser (user: UserInstance) {
246 // attributes = [] because we don't want other fields than the sum 245 // Don't use sequelize because we need to use a subquery
247 const query = { 246 const query = 'SELECT SUM("size") AS "total" FROM ' +
248 where: { 247 '(SELECT MAX("VideoFiles"."size") AS "size" FROM "VideoFiles" ' +
249 resolution: VideoResolution.ORIGINAL 248 'INNER JOIN "Videos" ON "VideoFiles"."videoId" = "Videos"."id" ' +
250 }, 249 'INNER JOIN "Authors" ON "Videos"."authorId" = "Authors"."id" ' +
251 include: [ 250 'INNER JOIN "Users" ON "Authors"."userId" = "Users"."id" ' +
252 { 251 'WHERE "Users"."id" = $userId GROUP BY "Videos"."id") t'
253 attributes: [], 252
254 model: User['sequelize'].models.Video, 253 const options = {
255 include: [ 254 bind: { userId: user.id },
256 { 255 type: Sequelize.QueryTypes.SELECT
257 attributes: [],
258 model: User['sequelize'].models.Author,
259 include: [
260 {
261 attributes: [],
262 model: User['sequelize'].models.User,
263 where: {
264 id: user.id
265 }
266 }
267 ]
268 }
269 ]
270 }
271 ]
272 } 256 }
257 return User['sequelize'].query(query, options).then(([ { total } ]) => {
258 if (total === null) return 0
273 259
274 return User['sequelize'].models.VideoFile.sum('size', query) 260 return parseInt(total, 10)
261 })
275} 262}