]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video-channel.ts
Merge branch 'release/2.3.0' into develop
[github/Chocobozzz/PeerTube.git] / server / models / video / video-channel.ts
index b5bcbdc655b16f3487b263b5a4bb5dc8481d7fb1..03a3cdf81da8c7c7f6d84cc89666bbc67936cbbe 100644 (file)
@@ -41,7 +41,7 @@ import {
   MChannelAP,
   MChannelFormattable,
   MChannelSummaryFormattable
-} from '../../typings/models/video'
+} from '../../types/models/video'
 
 export enum ScopeNames {
   FOR_API = 'FOR_API',
@@ -61,6 +61,7 @@ type AvailableWithStatsOptions = {
 }
 
 export type SummaryOptions = {
+  actorRequired?: boolean // Default: true
   withAccount?: boolean // Default: false
   withAccountBlockerIds?: number[]
 }
@@ -121,7 +122,7 @@ export type SummaryOptions = {
         {
           attributes: [ 'id', 'preferredUsername', 'url', 'serverId', 'avatarId' ],
           model: ActorModel.unscoped(),
-          required: true,
+          required: options.actorRequired ?? true,
           include: [
             {
               attributes: [ 'host' ],
@@ -172,6 +173,10 @@ export type SummaryOptions = {
     return {
       attributes: {
         include: [
+          [
+            literal('(SELECT COUNT(*) FROM "video" WHERE "channelId" = "VideoChannelModel"."id")'),
+            'videosCount'
+          ],
           [
             literal(
               '(' +
@@ -544,7 +549,22 @@ export class VideoChannelModel extends Model<VideoChannelModel> {
   }
 
   toFormattedJSON (this: MChannelFormattable): VideoChannel {
-    const viewsPerDay = this.get('viewsPerDay') as string
+    const viewsPerDayString = this.get('viewsPerDay') as string
+    const videosCount = this.get('videosCount') as number
+
+    let viewsPerDay: { date: Date, views: number }[]
+
+    if (viewsPerDayString) {
+      viewsPerDay = viewsPerDayString.split(',')
+        .map(v => {
+          const [ dateString, amount ] = v.split('|')
+
+          return {
+            date: new Date(dateString),
+            views: +amount
+          }
+        })
+    }
 
     const actor = this.Actor.toFormattedJSON()
     const videoChannel = {
@@ -556,15 +576,8 @@ export class VideoChannelModel extends Model<VideoChannelModel> {
       createdAt: this.createdAt,
       updatedAt: this.updatedAt,
       ownerAccount: undefined,
-      viewsPerDay: viewsPerDay
-        ? viewsPerDay.split(',').map(v => {
-          const o = v.split('|')
-          return {
-            date: new Date(o[0]),
-            views: +o[1]
-          }
-        })
-        : undefined
+      videosCount,
+      viewsPerDay
     }
 
     if (this.Account) videoChannel.ownerAccount = this.Account.toFormattedJSON()