]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/controllers/api/videos/index.ts
Better view counter
[github/Chocobozzz/PeerTube.git] / server / controllers / api / videos / index.ts
index 244d9191408e172a9d9cb835e5047fce10d8aa4f..e2798830ef1a31b4d087ec6ad6c36874fa1a317d 100644 (file)
@@ -104,6 +104,10 @@ videosRouter.get('/:id',
   asyncMiddleware(videosGetValidator),
   getVideo
 )
+videosRouter.post('/:id/views',
+  asyncMiddleware(videosGetValidator),
+  asyncMiddleware(viewVideo)
+)
 
 videosRouter.delete('/:id',
   authenticate,
@@ -311,25 +315,25 @@ async function updateVideo (req: express.Request, res: express.Response) {
   }
 }
 
-async function getVideo (req: express.Request, res: express.Response) {
+function getVideo (req: express.Request, res: express.Response) {
+  const videoInstance = res.locals.video
+
+  return res.json(videoInstance.toFormattedDetailsJSON())
+}
+
+async function viewVideo (req: express.Request, res: express.Response) {
   const videoInstance = res.locals.video
 
-  const baseIncrementPromise = videoInstance.increment('views')
-    .then(() => getServerAccount())
+  await videoInstance.increment('views')
+  const serverAccount = await getServerAccount()
 
   if (videoInstance.isOwned()) {
-    // The increment is done directly in the database, not using the instance value
-    baseIncrementPromise
-      .then(serverAccount => sendCreateViewToVideoFollowers(serverAccount, videoInstance, undefined))
-      .catch(err => logger.error('Cannot add view to video/send view to followers for %s.', videoInstance.uuid, err))
+    await sendCreateViewToVideoFollowers(serverAccount, videoInstance, undefined)
   } else {
-    baseIncrementPromise
-      .then(serverAccount => sendCreateViewToOrigin(serverAccount, videoInstance, undefined))
-      .catch(err => logger.error('Cannot send view to origin server for %s.', videoInstance.uuid, err))
+    await sendCreateViewToOrigin(serverAccount, videoInstance, undefined)
   }
 
-  // Do not wait the view system
-  return res.json(videoInstance.toFormattedDetailsJSON())
+  return res.status(204).end()
 }
 
 async function getVideoDescription (req: express.Request, res: express.Response) {