diff --git a/client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts b/client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts index eeab3a8dd..27a157621 100644 --- a/client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts +++ b/client/src/app/+my-account/my-account-video-channels/my-account-video-channels.component.ts @@ -57,7 +57,7 @@ export class MyAccountVideoChannelsComponent implements OnInit { min: Math.max(0, this.videoChannelsMinimumDailyViews - (3 * this.videoChannelsMaximumDailyViews / 100)), max: this.videoChannelsMaximumDailyViews } - }], + }] }, layout: { padding: { @@ -68,7 +68,7 @@ export class MyAccountVideoChannelsComponent implements OnInit { } }, elements: { - point:{ + point: { radius: 0 } }, @@ -76,14 +76,12 @@ export class MyAccountVideoChannelsComponent implements OnInit { mode: 'index', intersect: false, custom: function (tooltip: any) { - if (!tooltip) return; - // disable displaying the color box; - tooltip.displayColors = false; + if (!tooltip) return + // disable displaying the color box + tooltip.displayColors = false }, callbacks: { - label: function (tooltip: any, data: any) { - return `${tooltip.value} views`; - } + label: (tooltip: any, data: any) => `${tooltip.value} views` } }, hover: { @@ -124,7 +122,7 @@ export class MyAccountVideoChannelsComponent implements OnInit { private loadVideoChannels () { this.authService.userInformationLoaded - .pipe(flatMap(() => this.videoChannelService.listAccountVideoChannels(this.user.account))) + .pipe(flatMap(() => this.videoChannelService.listAccountVideoChannels(this.user.account, null, true))) .subscribe(res => { this.videoChannels = res.data this.videoChannelsData = this.videoChannels.map(v => ({ diff --git a/client/src/app/shared/video-channel/video-channel.model.ts b/client/src/app/shared/video-channel/video-channel.model.ts index ee3288d7a..c93af0ca5 100644 --- a/client/src/app/shared/video-channel/video-channel.model.ts +++ b/client/src/app/shared/video-channel/video-channel.model.ts @@ -25,7 +25,7 @@ export class VideoChannel extends Actor implements ServerVideoChannel { this.nameWithHostForced = Actor.CREATE_BY_STRING(this.name, this.host, true) if (hash.viewsPerDay) { - this.viewsPerDay = hash.viewsPerDay.map(v => ({ ...v, date: new Date(v.date)})) + this.viewsPerDay = hash.viewsPerDay.map(v => ({ ...v, date: new Date(v.date) })) } if (hash.ownerAccount) { diff --git a/client/src/app/shared/video-channel/video-channel.service.ts b/client/src/app/shared/video-channel/video-channel.service.ts index adb4f4819..0e036bda7 100644 --- a/client/src/app/shared/video-channel/video-channel.service.ts +++ b/client/src/app/shared/video-channel/video-channel.service.ts @@ -44,13 +44,18 @@ export class VideoChannelService { ) } - listAccountVideoChannels (account: Account, componentPagination?: ComponentPaginationLight): Observable> { + listAccountVideoChannels ( + account: Account, + componentPagination?: ComponentPaginationLight, + withStats = false + ): Observable> { const pagination = componentPagination ? this.restService.componentPaginationToRestPagination(componentPagination) : { start: 0, count: 20 } let params = new HttpParams() params = this.restService.addRestGetParams(params, pagination) + params = params.set('withStats', withStats + '') const url = AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/video-channels' return this.authHttp.get>(url, { params }) diff --git a/server/controllers/api/accounts.ts b/server/controllers/api/accounts.ts index f354ccf24..f8d2bad8b 100644 --- a/server/controllers/api/accounts.ts +++ b/server/controllers/api/accounts.ts @@ -17,7 +17,8 @@ import { accountsSortValidator, ensureAuthUserOwnsAccountValidator, videoChannelsSortValidator, - videosSortValidator + videosSortValidator, + videoChannelStatsValidator } from '../../middlewares/validators' import { AccountModel } from '../../models/account/account' import { AccountVideoRateModel } from '../../models/account/account-video-rate' @@ -56,6 +57,7 @@ accountsRouter.get('/:accountName/videos', accountsRouter.get('/:accountName/video-channels', asyncMiddleware(accountNameWithHostGetValidator), + videoChannelStatsValidator, paginationValidator, videoChannelsSortValidator, setDefaultSort, @@ -116,7 +118,8 @@ async function listAccountChannels (req: express.Request, res: express.Response) accountId: res.locals.account.id, start: req.query.start, count: req.query.count, - sort: req.query.sort + sort: req.query.sort, + withStats: req.query.withStats } const resultList = await VideoChannelModel.listByAccount(options) diff --git a/server/middlewares/validators/videos/video-channels.ts b/server/middlewares/validators/videos/video-channels.ts index ebce14714..882fb2b84 100644 --- a/server/middlewares/validators/videos/video-channels.ts +++ b/server/middlewares/validators/videos/video-channels.ts @@ -1,5 +1,5 @@ import * as express from 'express' -import { body, param } from 'express-validator' +import { body, param, query } from 'express-validator' import { UserRight } from '../../../../shared' import { isVideoChannelDescriptionValid, @@ -128,6 +128,15 @@ const localVideoChannelValidator = [ } ] +const videoChannelStatsValidator = [ + query('withStats').optional().isBoolean().withMessage('Should have a valid stats flag'), + + (req: express.Request, res: express.Response, next: express.NextFunction) => { + if (areValidationErrors(req, res)) return + return next() + } +] + // --------------------------------------------------------------------------- export { @@ -135,7 +144,8 @@ export { videoChannelsUpdateValidator, videoChannelsRemoveValidator, videoChannelsNameWithHostValidator, - localVideoChannelValidator + localVideoChannelValidator, + videoChannelStatsValidator } // --------------------------------------------------------------------------- diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts index 128915af3..5e6541837 100644 --- a/server/models/video/video-channel.ts +++ b/server/models/video/video-channel.ts @@ -412,7 +412,6 @@ export class VideoChannelModel extends Model { const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR ] - options.withStats = true // TODO: remove beyond after initial tests if (options.withStats) { scopes.push({ method: [ ScopeNames.WITH_STATS, { daysPrior: 30 } as AvailableWithStatsOptions ]