From 3acc50844047a37698f0618fa235c138e386a053 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 23 Apr 2019 09:50:57 +0200 Subject: Upgrade sequelize --- server/models/redundancy/video-redundancy.ts | 56 +++++++++++++--------------- 1 file changed, 26 insertions(+), 30 deletions(-) (limited to 'server/models/redundancy') diff --git a/server/models/redundancy/video-redundancy.ts b/server/models/redundancy/video-redundancy.ts index cbeaa662b..eb2222256 100644 --- a/server/models/redundancy/video-redundancy.ts +++ b/server/models/redundancy/video-redundancy.ts @@ -13,7 +13,7 @@ import { UpdatedAt } from 'sequelize-typescript' import { ActorModel } from '../activitypub/actor' -import { getVideoSort, throwIfNotValid } from '../utils' +import { getVideoSort, parseAggregateResult, throwIfNotValid } from '../utils' import { isActivityPubUrlValid, isUrlValid } from '../../helpers/custom-validators/activitypub/misc' import { CONSTRAINTS_FIELDS, MIMETYPES } from '../../initializers/constants' import { VideoFileModel } from '../video/video-file' @@ -27,7 +27,7 @@ import { ServerModel } from '../server/server' import { sample } from 'lodash' import { isTestInstance } from '../../helpers/core-utils' import * as Bluebird from 'bluebird' -import * as Sequelize from 'sequelize' +import { col, FindOptions, fn, literal, Op, Transaction } from 'sequelize' import { VideoStreamingPlaylistModel } from '../video/video-streaming-playlist' import { CONFIG } from '../../initializers/config' @@ -35,32 +35,32 @@ export enum ScopeNames { WITH_VIDEO = 'WITH_VIDEO' } -@Scopes({ +@Scopes(() => ({ [ ScopeNames.WITH_VIDEO ]: { include: [ { - model: () => VideoFileModel, + model: VideoFileModel, required: false, include: [ { - model: () => VideoModel, + model: VideoModel, required: true } ] }, { - model: () => VideoStreamingPlaylistModel, + model: VideoStreamingPlaylistModel, required: false, include: [ { - model: () => VideoModel, + model: VideoModel, required: true } ] } - ] as any // FIXME: sequelize typings + ] } -}) +})) @Table({ tableName: 'videoRedundancy', @@ -192,7 +192,7 @@ export class VideoRedundancyModel extends Model { return VideoRedundancyModel.scope(ScopeNames.WITH_VIDEO).findOne(query) } - static loadByUrl (url: string, transaction?: Sequelize.Transaction) { + static loadByUrl (url: string, transaction?: Transaction) { const query = { where: { url @@ -292,7 +292,7 @@ export class VideoRedundancyModel extends Model { where: { privacy: VideoPrivacy.PUBLIC, views: { - [ Sequelize.Op.gte ]: minViews + [ Op.gte ]: minViews } }, include: [ @@ -315,7 +315,7 @@ export class VideoRedundancyModel extends Model { actorId: actor.id, strategy, createdAt: { - [ Sequelize.Op.lt ]: expiredDate + [ Op.lt ]: expiredDate } } } @@ -326,7 +326,7 @@ export class VideoRedundancyModel extends Model { static async getTotalDuplicated (strategy: VideoRedundancyStrategy) { const actor = await getServerActor() - const options = { + const query: FindOptions = { include: [ { attributes: [], @@ -340,12 +340,8 @@ export class VideoRedundancyModel extends Model { ] } - return VideoFileModel.sum('size', options as any) // FIXME: typings - .then(v => { - if (!v || isNaN(v)) return 0 - - return v - }) + return VideoFileModel.aggregate('size', 'SUM', query) + .then(result => parseAggregateResult(result)) } static async listLocalExpired () { @@ -355,7 +351,7 @@ export class VideoRedundancyModel extends Model { where: { actorId: actor.id, expiresOn: { - [ Sequelize.Op.lt ]: new Date() + [ Op.lt ]: new Date() } } } @@ -369,10 +365,10 @@ export class VideoRedundancyModel extends Model { const query = { where: { actorId: { - [Sequelize.Op.ne]: actor.id + [Op.ne]: actor.id }, expiresOn: { - [ Sequelize.Op.lt ]: new Date() + [ Op.lt ]: new Date() } } } @@ -428,12 +424,12 @@ export class VideoRedundancyModel extends Model { static async getStats (strategy: VideoRedundancyStrategy) { const actor = await getServerActor() - const query = { + const query: FindOptions = { raw: true, attributes: [ - [ Sequelize.fn('COALESCE', Sequelize.fn('SUM', Sequelize.col('VideoFile.size')), '0'), 'totalUsed' ], - [ Sequelize.fn('COUNT', Sequelize.fn('DISTINCT', Sequelize.col('videoId'))), 'totalVideos' ], - [ Sequelize.fn('COUNT', Sequelize.col('videoFileId')), 'totalVideoFiles' ] + [ fn('COALESCE', fn('SUM', col('VideoFile.size')), '0'), 'totalUsed' ], + [ fn('COUNT', fn('DISTINCT', col('videoId'))), 'totalVideos' ], + [ fn('COUNT', col('videoFileId')), 'totalVideoFiles' ] ], where: { strategy, @@ -448,9 +444,9 @@ export class VideoRedundancyModel extends Model { ] } - return VideoRedundancyModel.findOne(query as any) // FIXME: typings + return VideoRedundancyModel.findOne(query) .then((r: any) => ({ - totalUsed: parseInt(r.totalUsed.toString(), 10), + totalUsed: parseAggregateResult(r.totalUsed), totalVideos: r.totalVideos, totalVideoFiles: r.totalVideoFiles })) @@ -503,7 +499,7 @@ export class VideoRedundancyModel extends Model { private static async buildVideoFileForDuplication () { const actor = await getServerActor() - const notIn = Sequelize.literal( + const notIn = literal( '(' + `SELECT "videoFileId" FROM "videoRedundancy" WHERE "actorId" = ${actor.id} AND "videoFileId" IS NOT NULL` + ')' @@ -515,7 +511,7 @@ export class VideoRedundancyModel extends Model { required: true, where: { id: { - [ Sequelize.Op.notIn ]: notIn + [ Op.notIn ]: notIn } } } -- cgit v1.2.3