]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/models/view/video-view.ts
Fix subscribe button responsive
[github/Chocobozzz/PeerTube.git] / server / models / view / video-view.ts
1 import { literal, Op } from 'sequelize'
2 import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Model, Table } from 'sequelize-typescript'
3 import { AttributesOnly } from '@shared/typescript-utils'
4 import { VideoModel } from '../video/video'
5
6 /**
7 *
8 * Aggregate views of all videos federated with our instance
9 * Mainly used by the trending/hot algorithms
10 *
11 */
12
13 @Table({
14 tableName: 'videoView',
15 updatedAt: false,
16 indexes: [
17 {
18 fields: [ 'videoId' ]
19 },
20 {
21 fields: [ 'startDate' ]
22 }
23 ]
24 })
25 export class VideoViewModel extends Model<Partial<AttributesOnly<VideoViewModel>>> {
26 @CreatedAt
27 createdAt: Date
28
29 @AllowNull(false)
30 @Column(DataType.DATE)
31 startDate: Date
32
33 @AllowNull(false)
34 @Column(DataType.DATE)
35 endDate: Date
36
37 @AllowNull(false)
38 @Column
39 views: number
40
41 @ForeignKey(() => VideoModel)
42 @Column
43 videoId: number
44
45 @BelongsTo(() => VideoModel, {
46 foreignKey: {
47 allowNull: false
48 },
49 onDelete: 'CASCADE'
50 })
51 Video: VideoModel
52
53 static removeOldRemoteViewsHistory (beforeDate: string) {
54 const query = {
55 where: {
56 startDate: {
57 [Op.lt]: beforeDate
58 },
59 videoId: {
60 [Op.in]: literal('(SELECT "id" FROM "video" WHERE "remote" IS TRUE)')
61 }
62 }
63 }
64
65 return VideoViewModel.destroy(query)
66 }
67 }