X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Faccount%2Faccount-video-rate.ts;h=ee6dbc6da055dd6f3aafc3f6661997172404b948;hb=8ee37c5f38b0f9b7e97239197d5590109c163250;hp=d9c52949114becc9b603f7cb0874aa947df6cbce;hpb=b49f22d8f9a52ab75fd38db2d377249eb58fa678;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/account/account-video-rate.ts b/server/models/account/account-video-rate.ts index d9c529491..ee6dbc6da 100644 --- a/server/models/account/account-video-rate.ts +++ b/server/models/account/account-video-rate.ts @@ -7,11 +7,12 @@ import { MAccountVideoRateAccountVideo, MAccountVideoRateFormattable } from '@server/types/models/video/video-rate' +import { AttributesOnly } from '@shared/core-utils' import { AccountVideoRate } from '../../../shared' import { VideoRateType } from '../../../shared/models/videos' import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc' import { CONSTRAINTS_FIELDS, VIDEO_RATE_TYPES } from '../../initializers/constants' -import { ActorModel } from '../activitypub/actor' +import { ActorModel } from '../actor/actor' import { buildLocalAccountIdsIn, getSort, throwIfNotValid } from '../utils' import { VideoModel } from '../video/video' import { ScopeNames as VideoChannelScopeNames, SummaryOptions, VideoChannelModel } from '../video/video-channel' @@ -42,7 +43,7 @@ import { AccountModel } from './account' } ] }) -export class AccountVideoRateModel extends Model { +export class AccountVideoRateModel extends Model>> { @AllowNull(false) @Column(DataType.ENUM(...values(VIDEO_RATE_TYPES))) @@ -146,10 +147,22 @@ export class AccountVideoRateModel extends Model { return AccountVideoRateModel.findAndCountAll(query) } + static listRemoteRateUrlsOfLocalVideos () { + const query = `SELECT "accountVideoRate".url FROM "accountVideoRate" ` + + `INNER JOIN account ON account.id = "accountVideoRate"."accountId" ` + + `INNER JOIN actor ON actor.id = account."actorId" AND actor."serverId" IS NOT NULL ` + + `INNER JOIN video ON video.id = "accountVideoRate"."videoId" AND video.remote IS FALSE` + + return AccountVideoRateModel.sequelize.query<{ url: string }>(query, { + type: QueryTypes.SELECT, + raw: true + }).then(rows => rows.map(r => r.url)) + } + static loadLocalAndPopulateVideo ( rateType: VideoRateType, accountName: string, - videoId: number | string, + videoId: number, t?: Transaction ): Promise { const options: FindOptions = { @@ -241,21 +254,7 @@ export class AccountVideoRateModel extends Model { await AccountVideoRateModel.destroy(query) - const field = type === 'like' - ? 'likes' - : 'dislikes' - - const rawQuery = `UPDATE "video" SET "${field}" = ` + - '(' + - 'SELECT COUNT(id) FROM "accountVideoRate" WHERE "accountVideoRate"."videoId" = "video"."id" AND type = :rateType' + - ') ' + - 'WHERE "video"."id" = :videoId' - - return AccountVideoRateModel.sequelize.query(rawQuery, { - transaction: t, - replacements: { videoId, rateType: type }, - type: QueryTypes.UPDATE - }) + return VideoModel.updateRatesOf(videoId, type, t) }) }