-import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, IsInt, Min, Model, Table, UpdatedAt } from 'sequelize-typescript'
+import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, IsInt, Model, Table, UpdatedAt } from 'sequelize-typescript'
import { VideoModel } from '../video/video'
import { UserModel } from './user'
+import { DestroyOptions, Op, Transaction } from 'sequelize'
+import { MUserAccountId, MUserId } from '@server/types/models'
@Table({
tableName: 'userVideoHistory',
onDelete: 'CASCADE'
})
User: UserModel
+
+ static listForApi (user: MUserAccountId, start: number, count: number) {
+ return VideoModel.listForApi({
+ start,
+ count,
+ sort: '-"userVideoHistory"."updatedAt"',
+ nsfw: null, // All
+ includeLocalVideos: true,
+ withFiles: false,
+ user,
+ historyOfUser: user
+ })
+ }
+
+ static removeUserHistoryBefore (user: MUserId, beforeDate: string, t: Transaction) {
+ const query: DestroyOptions = {
+ where: {
+ userId: user.id
+ },
+ transaction: t
+ }
+
+ if (beforeDate) {
+ query.where['updatedAt'] = {
+ [Op.lt]: beforeDate
+ }
+ }
+
+ return UserVideoHistoryModel.destroy(query)
+ }
+
+ static removeOldHistory (beforeDate: string) {
+ const query: DestroyOptions = {
+ where: {
+ updatedAt: {
+ [Op.lt]: beforeDate
+ }
+ }
+ }
+
+ return UserVideoHistoryModel.destroy(query)
+ }
}