X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-job-info.ts;h=5845b8c74b4f0cdfc6e95c07dd41d1383b9f4621;hb=f89189907bbdff6c4bc6d3460ed9ef4c49515f17;hp=7da5128d7598a338262bf3b8b5a09082270240c2;hpb=9ea02c48a7a47b5bbed261e847d7d671e266a073;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-job-info.ts b/server/models/video/video-job-info.ts index 7da5128d7..5845b8c74 100644 --- a/server/models/video/video-job-info.ts +++ b/server/models/video/video-job-info.ts @@ -1,6 +1,7 @@ import { Op, QueryTypes, Transaction } from 'sequelize' import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, IsInt, Model, Table, Unique, UpdatedAt } from 'sequelize-typescript' -import { AttributesOnly } from '@shared/core-utils' +import { forceNumber } from '@shared/core-utils' +import { AttributesOnly } from '@shared/typescript-utils' import { VideoModel } from './video' export type VideoJobInfoColumnType = 'pendingMove' | 'pendingTranscode' @@ -59,32 +60,33 @@ export class VideoJobInfoModel extends Model { + static async increaseOrCreate (videoUUID: string, column: VideoJobInfoColumnType, amountArg = 1): Promise { const options = { type: QueryTypes.SELECT as QueryTypes.SELECT, bind: { videoUUID } } + const amount = forceNumber(amountArg) - const [ { pendingMove } ] = await VideoJobInfoModel.sequelize.query<{ pendingMove: number }>(` + const [ result ] = await VideoJobInfoModel.sequelize.query<{ pendingMove: number }>(` INSERT INTO "videoJobInfo" ("videoId", "${column}", "createdAt", "updatedAt") SELECT - "video"."id" AS "videoId", 1, NOW(), NOW() + "video"."id" AS "videoId", ${amount}, NOW(), NOW() FROM "video" WHERE "video"."uuid" = $videoUUID ON CONFLICT ("videoId") DO UPDATE SET - "${column}" = "videoJobInfo"."${column}" + 1, + "${column}" = "videoJobInfo"."${column}" + ${amount}, "updatedAt" = NOW() RETURNING "${column}" `, options) - return pendingMove + return result[column] } static async decrease (videoUUID: string, column: VideoJobInfoColumnType): Promise { const options = { type: QueryTypes.SELECT as QueryTypes.SELECT, bind: { videoUUID } } - const [ { pendingMove } ] = await VideoJobInfoModel.sequelize.query<{ pendingMove: number }>(` + const result = await VideoJobInfoModel.sequelize.query(` UPDATE "videoJobInfo" SET @@ -97,6 +99,23 @@ export class VideoJobInfoModel extends Model { + const options = { type: QueryTypes.UPDATE as QueryTypes.UPDATE, bind: { videoUUID } } + + await VideoJobInfoModel.sequelize.query(` + UPDATE + "videoJobInfo" + SET + "${column}" = 0, + "updatedAt" = NOW() + FROM "video" + WHERE + "video"."id" = "videoJobInfo"."videoId" AND "video"."uuid" = $videoUUID + `, options) } }