From b211106695bb82f6c32e53306081b5262c3d109d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 24 Mar 2022 13:36:47 +0100 Subject: Support video views/viewers stats in server * Add "currentTime" and "event" body params to view endpoint * Merge watching and view endpoints * Introduce WatchAction AP activity * Add tables to store viewer information of local videos * Add endpoints to fetch video views/viewers stats of local videos * Refactor views/viewers handlers * Support "views" and "viewers" counters for both VOD and live videos --- server/models/view/video-view.ts | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 server/models/view/video-view.ts (limited to 'server/models/view/video-view.ts') diff --git a/server/models/view/video-view.ts b/server/models/view/video-view.ts new file mode 100644 index 000000000..df462e631 --- /dev/null +++ b/server/models/view/video-view.ts @@ -0,0 +1,60 @@ +import { literal, Op } from 'sequelize' +import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Model, Table } from 'sequelize-typescript' +import { AttributesOnly } from '@shared/typescript-utils' +import { VideoModel } from '../video/video' + +@Table({ + tableName: 'videoView', + updatedAt: false, + indexes: [ + { + fields: [ 'videoId' ] + }, + { + fields: [ 'startDate' ] + } + ] +}) +export class VideoViewModel extends Model>> { + @CreatedAt + createdAt: Date + + @AllowNull(false) + @Column(DataType.DATE) + startDate: Date + + @AllowNull(false) + @Column(DataType.DATE) + endDate: Date + + @AllowNull(false) + @Column + views: number + + @ForeignKey(() => VideoModel) + @Column + videoId: number + + @BelongsTo(() => VideoModel, { + foreignKey: { + allowNull: false + }, + onDelete: 'CASCADE' + }) + Video: VideoModel + + static removeOldRemoteViewsHistory (beforeDate: string) { + const query = { + where: { + startDate: { + [Op.lt]: beforeDate + }, + videoId: { + [Op.in]: literal('(SELECT "id" FROM "video" WHERE "remote" IS TRUE)') + } + } + } + + return VideoViewModel.destroy(query) + } +} -- cgit v1.2.3