Put channel stats behind withStats flag

This commit is contained in:
Rigel Kent 2020-03-24 01:12:30 +01:00 committed by Chocobozzz
parent 8165d00ac6
commit 747c562837
6 changed files with 31 additions and 16 deletions

View File

@ -57,7 +57,7 @@ export class MyAccountVideoChannelsComponent implements OnInit {
min: Math.max(0, this.videoChannelsMinimumDailyViews - (3 * this.videoChannelsMaximumDailyViews / 100)), min: Math.max(0, this.videoChannelsMinimumDailyViews - (3 * this.videoChannelsMaximumDailyViews / 100)),
max: this.videoChannelsMaximumDailyViews max: this.videoChannelsMaximumDailyViews
} }
}], }]
}, },
layout: { layout: {
padding: { padding: {
@ -68,7 +68,7 @@ export class MyAccountVideoChannelsComponent implements OnInit {
} }
}, },
elements: { elements: {
point:{ point: {
radius: 0 radius: 0
} }
}, },
@ -76,14 +76,12 @@ export class MyAccountVideoChannelsComponent implements OnInit {
mode: 'index', mode: 'index',
intersect: false, intersect: false,
custom: function (tooltip: any) { custom: function (tooltip: any) {
if (!tooltip) return; if (!tooltip) return
// disable displaying the color box; // disable displaying the color box
tooltip.displayColors = false; tooltip.displayColors = false
}, },
callbacks: { callbacks: {
label: function (tooltip: any, data: any) { label: (tooltip: any, data: any) => `${tooltip.value} views`
return `${tooltip.value} views`;
}
} }
}, },
hover: { hover: {
@ -124,7 +122,7 @@ export class MyAccountVideoChannelsComponent implements OnInit {
private loadVideoChannels () { private loadVideoChannels () {
this.authService.userInformationLoaded this.authService.userInformationLoaded
.pipe(flatMap(() => this.videoChannelService.listAccountVideoChannels(this.user.account))) .pipe(flatMap(() => this.videoChannelService.listAccountVideoChannels(this.user.account, null, true)))
.subscribe(res => { .subscribe(res => {
this.videoChannels = res.data this.videoChannels = res.data
this.videoChannelsData = this.videoChannels.map(v => ({ this.videoChannelsData = this.videoChannels.map(v => ({

View File

@ -25,7 +25,7 @@ export class VideoChannel extends Actor implements ServerVideoChannel {
this.nameWithHostForced = Actor.CREATE_BY_STRING(this.name, this.host, true) this.nameWithHostForced = Actor.CREATE_BY_STRING(this.name, this.host, true)
if (hash.viewsPerDay) { 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) { if (hash.ownerAccount) {

View File

@ -44,13 +44,18 @@ export class VideoChannelService {
) )
} }
listAccountVideoChannels (account: Account, componentPagination?: ComponentPaginationLight): Observable<ResultList<VideoChannel>> { listAccountVideoChannels (
account: Account,
componentPagination?: ComponentPaginationLight,
withStats = false
): Observable<ResultList<VideoChannel>> {
const pagination = componentPagination const pagination = componentPagination
? this.restService.componentPaginationToRestPagination(componentPagination) ? this.restService.componentPaginationToRestPagination(componentPagination)
: { start: 0, count: 20 } : { start: 0, count: 20 }
let params = new HttpParams() let params = new HttpParams()
params = this.restService.addRestGetParams(params, pagination) params = this.restService.addRestGetParams(params, pagination)
params = params.set('withStats', withStats + '')
const url = AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/video-channels' const url = AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/video-channels'
return this.authHttp.get<ResultList<VideoChannelServer>>(url, { params }) return this.authHttp.get<ResultList<VideoChannelServer>>(url, { params })

View File

@ -17,7 +17,8 @@ import {
accountsSortValidator, accountsSortValidator,
ensureAuthUserOwnsAccountValidator, ensureAuthUserOwnsAccountValidator,
videoChannelsSortValidator, videoChannelsSortValidator,
videosSortValidator videosSortValidator,
videoChannelStatsValidator
} from '../../middlewares/validators' } from '../../middlewares/validators'
import { AccountModel } from '../../models/account/account' import { AccountModel } from '../../models/account/account'
import { AccountVideoRateModel } from '../../models/account/account-video-rate' import { AccountVideoRateModel } from '../../models/account/account-video-rate'
@ -56,6 +57,7 @@ accountsRouter.get('/:accountName/videos',
accountsRouter.get('/:accountName/video-channels', accountsRouter.get('/:accountName/video-channels',
asyncMiddleware(accountNameWithHostGetValidator), asyncMiddleware(accountNameWithHostGetValidator),
videoChannelStatsValidator,
paginationValidator, paginationValidator,
videoChannelsSortValidator, videoChannelsSortValidator,
setDefaultSort, setDefaultSort,
@ -116,7 +118,8 @@ async function listAccountChannels (req: express.Request, res: express.Response)
accountId: res.locals.account.id, accountId: res.locals.account.id,
start: req.query.start, start: req.query.start,
count: req.query.count, count: req.query.count,
sort: req.query.sort sort: req.query.sort,
withStats: req.query.withStats
} }
const resultList = await VideoChannelModel.listByAccount(options) const resultList = await VideoChannelModel.listByAccount(options)

View File

@ -1,5 +1,5 @@
import * as express from 'express' import * as express from 'express'
import { body, param } from 'express-validator' import { body, param, query } from 'express-validator'
import { UserRight } from '../../../../shared' import { UserRight } from '../../../../shared'
import { import {
isVideoChannelDescriptionValid, 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 { export {
@ -135,7 +144,8 @@ export {
videoChannelsUpdateValidator, videoChannelsUpdateValidator,
videoChannelsRemoveValidator, videoChannelsRemoveValidator,
videoChannelsNameWithHostValidator, videoChannelsNameWithHostValidator,
localVideoChannelValidator localVideoChannelValidator,
videoChannelStatsValidator
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@ -412,7 +412,6 @@ export class VideoChannelModel extends Model<VideoChannelModel> {
const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR ] const scopes: string | ScopeOptions | (string | ScopeOptions)[] = [ ScopeNames.WITH_ACTOR ]
options.withStats = true // TODO: remove beyond after initial tests
if (options.withStats) { if (options.withStats) {
scopes.push({ scopes.push({
method: [ ScopeNames.WITH_STATS, { daysPrior: 30 } as AvailableWithStatsOptions ] method: [ ScopeNames.WITH_STATS, { daysPrior: 30 } as AvailableWithStatsOptions ]