69 lines
1.6 KiB
TypeScript
69 lines
1.6 KiB
TypeScript
import { MLocalVideoViewerWatchSection } from '@server/types/models/index.js'
|
|
import { Transaction } from 'sequelize'
|
|
import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Table } from 'sequelize-typescript'
|
|
import { SequelizeModel } from '../shared/index.js'
|
|
import { LocalVideoViewerModel } from './local-video-viewer.js'
|
|
|
|
@Table({
|
|
tableName: 'localVideoViewerWatchSection',
|
|
updatedAt: false,
|
|
indexes: [
|
|
{
|
|
fields: [ 'localVideoViewerId' ]
|
|
}
|
|
]
|
|
})
|
|
export class LocalVideoViewerWatchSectionModel extends SequelizeModel<LocalVideoViewerWatchSectionModel> {
|
|
@CreatedAt
|
|
createdAt: Date
|
|
|
|
@AllowNull(false)
|
|
@Column
|
|
watchStart: number
|
|
|
|
@AllowNull(false)
|
|
@Column
|
|
watchEnd: number
|
|
|
|
@ForeignKey(() => LocalVideoViewerModel)
|
|
@Column
|
|
localVideoViewerId: number
|
|
|
|
@BelongsTo(() => LocalVideoViewerModel, {
|
|
foreignKey: {
|
|
allowNull: false
|
|
},
|
|
onDelete: 'CASCADE'
|
|
})
|
|
LocalVideoViewer: Awaited<LocalVideoViewerModel>
|
|
|
|
static async bulkCreateSections (options: {
|
|
localVideoViewerId: number
|
|
watchSections: {
|
|
start: number
|
|
end: number
|
|
}[]
|
|
transaction?: Transaction
|
|
}) {
|
|
const { localVideoViewerId, watchSections, transaction } = options
|
|
const models: MLocalVideoViewerWatchSection[] = []
|
|
|
|
for (const section of watchSections) {
|
|
const watchStart = section.start || 0
|
|
const watchEnd = section.end || 0
|
|
|
|
if (watchStart === watchEnd) continue
|
|
|
|
const model = await this.create({
|
|
watchStart,
|
|
watchEnd,
|
|
localVideoViewerId
|
|
}, { transaction })
|
|
|
|
models.push(model)
|
|
}
|
|
|
|
return models
|
|
}
|
|
}
|