X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-share.ts;h=fda2d7cea42e2231671bc59b023a8525d8550351;hb=97567dd81f508dd6295ac4d73d849aa2ce0a6549;hp=602cc69b90f1d09b9480e7e1c935268aada22a2b;hpb=0f320037e689b2778959c12ddd4ce790f6e4ae4f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-share.ts b/server/models/video/video-share.ts index 602cc69b9..fda2d7cea 100644 --- a/server/models/video/video-share.ts +++ b/server/models/video/video-share.ts @@ -2,7 +2,7 @@ import * as Sequelize from 'sequelize' import * as Bluebird from 'bluebird' import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Is, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript' import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc' -import { CONSTRAINTS_FIELDS } from '../../initializers' +import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { AccountModel } from '../account/account' import { ActorModel } from '../activitypub/actor' import { throwIfNotValid } from '../utils' @@ -14,15 +14,15 @@ enum ScopeNames { WITH_ACTOR = 'WITH_ACTOR' } -@Scopes({ +@Scopes(() => ({ [ScopeNames.FULL]: { include: [ { - model: () => ActorModel, + model: ActorModel, required: true }, { - model: () => VideoModel, + model: VideoModel, required: true } ] @@ -30,12 +30,12 @@ enum ScopeNames { [ScopeNames.WITH_ACTOR]: { include: [ { - model: () => ActorModel, + model: ActorModel, required: true } ] } -}) +})) @Table({ tableName: 'videoShare', indexes: [ @@ -88,7 +88,7 @@ export class VideoShareModel extends Model { }) Video: VideoModel - static load (actorId: number, videoId: number, t: Sequelize.Transaction) { + static load (actorId: number, videoId: number, t?: Sequelize.Transaction) { return VideoShareModel.scope(ScopeNames.WITH_ACTOR).findOne({ where: { actorId, @@ -99,7 +99,7 @@ export class VideoShareModel extends Model { } static loadByUrl (url: string, t: Sequelize.Transaction) { - return VideoShareModel.scope(ScopeNames.WITH_ACTOR).findOne({ + return VideoShareModel.scope(ScopeNames.FULL).findOne({ where: { url }, @@ -125,7 +125,7 @@ export class VideoShareModel extends Model { .then(res => res.map(r => r.Actor)) } - static loadActorsByVideoOwner (actorOwnerId: number, t: Sequelize.Transaction): Bluebird { + static loadActorsWhoSharedVideosOf (actorOwnerId: number, t: Sequelize.Transaction): Bluebird { const query = { attributes: [], include: [ @@ -187,4 +187,30 @@ export class VideoShareModel extends Model { .findAll(query) .then(res => res.map(r => r.Actor)) } + + static listAndCountByVideoId (videoId: number, start: number, count: number, t?: Sequelize.Transaction) { + const query = { + offset: start, + limit: count, + where: { + videoId + }, + transaction: t + } + + return VideoShareModel.findAndCountAll(query) + } + + static cleanOldSharesOf (videoId: number, beforeUpdatedAt: Date) { + const query = { + where: { + updatedAt: { + [Sequelize.Op.lt]: beforeUpdatedAt + }, + videoId + } + } + + return VideoShareModel.destroy(query) + } }