} 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',
fields: [ 'videoPlaylistId', 'videoId' ],
unique: true
},
- {
- fields: [ 'videoPlaylistId', 'position' ],
- unique: true
- },
{
fields: [ 'url' ],
unique: true
})
Video: VideoModel
- static deleteAllOf (videoPlaylistId: number, transaction?: Sequelize.Transaction) {
+ static deleteAllOf (videoPlaylistId: number, transaction?: Transaction) {
const query = {
where: {
videoPlaylistId
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,
order: getSort('position'),
where: {
videoPlaylistId
- }
+ },
+ transaction: t
}
return VideoPlaylistElementModel
})
}
- static getNextPositionOf (videoPlaylistId: number, transaction?: Sequelize.Transaction) {
- const query = {
+ static getNextPositionOf (videoPlaylistId: number, transaction?: Transaction) {
+ const query: AggregateOptions<number> = {
where: {
videoPlaylistId
},
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)
fromPosition: number,
toPosition?: number,
by = 1,
- transaction?: Sequelize.Transaction
+ transaction?: Transaction
) {
const query = {
where: {
videoPlaylistId,
position: {
- [Sequelize.Op.gte]: fromPosition
+ [Op.gte]: fromPosition
}
},
transaction