]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video-playlist-element.ts
Merge branch 'release/v1.3.0' into develop
[github/Chocobozzz/PeerTube.git] / server / models / video / video-playlist-element.ts
index d76149d1225f77e0981162008dbf6827644a550b..eeb3d6bbd5ec10059be86a45e5cf4b9e881b0cd4 100644 (file)
@@ -15,11 +15,12 @@ import {
 } from 'sequelize-typescript'
 import { VideoModel } from './video'
 import { VideoPlaylistModel } from './video-playlist'
-import * as Sequelize from 'sequelize'
 import { getSort, throwIfNotValid } from '../utils'
 import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc'
-import { CONSTRAINTS_FIELDS } from '../../initializers'
+import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
 import { PlaylistElementObject } from '../../../shared/models/activitypub/objects/playlist-element-object'
+import * as validator from 'validator'
+import { AggregateOptions, Op, Sequelize, Transaction } from 'sequelize'
 
 @Table({
   tableName: 'videoPlaylistElement',
@@ -34,10 +35,6 @@ import { PlaylistElementObject } from '../../../shared/models/activitypub/object
       fields: [ 'videoPlaylistId', 'videoId' ],
       unique: true
     },
-    {
-      fields: [ 'videoPlaylistId', 'position' ],
-      unique: true
-    },
     {
       fields: [ 'url' ],
       unique: true
@@ -99,7 +96,7 @@ export class VideoPlaylistElementModel extends Model<VideoPlaylistElementModel>
   })
   Video: VideoModel
 
-  static deleteAllOf (videoPlaylistId: number, transaction?: Sequelize.Transaction) {
+  static deleteAllOf (videoPlaylistId: number, transaction?: Transaction) {
     const query = {
       where: {
         videoPlaylistId
@@ -143,7 +140,7 @@ export class VideoPlaylistElementModel extends Model<VideoPlaylistElementModel>
     return VideoPlaylistElementModel.findOne(query)
   }
 
-  static listUrlsOfForAP (videoPlaylistId: number, start: number, count: number) {
+  static listUrlsOfForAP (videoPlaylistId: number, start: number, count: number, t?: Transaction) {
     const query = {
       attributes: [ 'url' ],
       offset: start,
@@ -151,7 +148,8 @@ export class VideoPlaylistElementModel extends Model<VideoPlaylistElementModel>
       order: getSort('position'),
       where: {
         videoPlaylistId
-      }
+      },
+      transaction: t
     }
 
     return VideoPlaylistElementModel
@@ -161,8 +159,8 @@ export class VideoPlaylistElementModel extends Model<VideoPlaylistElementModel>
       })
   }
 
-  static getNextPositionOf (videoPlaylistId: number, transaction?: Sequelize.Transaction) {
-    const query = {
+  static getNextPositionOf (videoPlaylistId: number, transaction?: Transaction) {
+    const query: AggregateOptions<number> = {
       where: {
         videoPlaylistId
       },
@@ -178,17 +176,18 @@ export class VideoPlaylistElementModel extends Model<VideoPlaylistElementModel>
     firstPosition: number,
     endPosition: number,
     newPosition: number,
-    transaction?: Sequelize.Transaction
+    transaction?: Transaction
   ) {
     const query = {
       where: {
         videoPlaylistId,
         position: {
-          [Sequelize.Op.gte]: firstPosition,
-          [Sequelize.Op.lte]: endPosition
+          [Op.gte]: firstPosition,
+          [Op.lte]: endPosition
         }
       },
-      transaction
+      transaction,
+      validate: false // We use a literal to update the position
     }
 
     return VideoPlaylistElementModel.update({ position: Sequelize.literal(`${newPosition} + "position" - ${firstPosition}`) }, query)
@@ -199,13 +198,13 @@ export class VideoPlaylistElementModel extends Model<VideoPlaylistElementModel>
     fromPosition: number,
     toPosition?: number,
     by = 1,
-    transaction?: Sequelize.Transaction
+    transaction?: Transaction
   ) {
     const query = {
       where: {
         videoPlaylistId,
         position: {
-          [Sequelize.Op.gte]: fromPosition
+          [Op.gte]: fromPosition
         }
       },
       transaction