Merge branch 'feature/audio-upload' into develop
[oweals/peertube.git] / server / models / video / video-views.ts
1 import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Table } from 'sequelize-typescript'
2 import { VideoModel } from './video'
3 import * as Sequelize from 'sequelize'
4
5 @Table({
6   tableName: 'videoView',
7   updatedAt: false,
8   indexes: [
9     {
10       fields: [ 'videoId' ]
11     },
12     {
13       fields: [ 'startDate' ]
14     }
15   ]
16 })
17 export class VideoViewModel extends Model<VideoViewModel> {
18   @CreatedAt
19   createdAt: Date
20
21   @AllowNull(false)
22   @Column(Sequelize.DATE)
23   startDate: Date
24
25   @AllowNull(false)
26   @Column(Sequelize.DATE)
27   endDate: Date
28
29   @AllowNull(false)
30   @Column
31   views: number
32
33   @ForeignKey(() => VideoModel)
34   @Column
35   videoId: number
36
37   @BelongsTo(() => VideoModel, {
38     foreignKey: {
39       allowNull: false
40     },
41     onDelete: 'CASCADE'
42   })
43   Video: VideoModel
44
45   static removeOldRemoteViewsHistory (beforeDate: string) {
46     const query = {
47       where: {
48         startDate: {
49           [Sequelize.Op.lt]: beforeDate
50         },
51         videoId: {
52           [Sequelize.Op.in]: Sequelize.literal('(SELECT "id" FROM "video" WHERE "remote" IS TRUE)')
53         }
54       }
55     }
56
57     return VideoViewModel.destroy(query)
58   }
59 }