File size: 1,415 Bytes
f70dd7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b161bd3
 
f70dd7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"use server"

import { Redis } from "@upstash/redis"

import { redisToken, redisUrl } from "./config"
import { developerMode } from "@/app/config"

const redis = new Redis({
  url: redisUrl,
  token: redisToken
})

export async function getNumberOfViewsForVideos(videoIds: string[]): Promise<Record<string, number>> {
  if (!Array.isArray(videoIds)) {
    return {}
  }

  try {
    
    const stats: Record<string, number> = {}

    const ids: string[] = []

    for (const videoId of videoIds) {
      ids.push(`videos:${videoId}:stats:views`)
      stats[videoId] = 0
    }

    const values = await redis.mget<number[]>(...ids)

    values.forEach((nbViews, i) => {
      const redisId = `${ids[i] || ""}`
      const videoId = redisId.replace(":stats:views", "").replace("videos:", "")
      stats[videoId] = nbViews || 0
    })

    return stats
  } catch (err) {
    return {}
  }
}

export async function getNumberOfViewsForVideo(videoId: string): Promise<number> {
  try {
    const key = `videos:${videoId}:stats`

    const result = await redis.get<number>(key) || 0

    return result
  } catch (err) {
    return 0
  }
}


export async function watchVideo(videoId: string): Promise<number> {
  if (developerMode) {
    return getNumberOfViewsForVideo(videoId)
  }

  try {
    const result = await redis.incr(`videos:${videoId}:stats:views`)
    
    return result
  } catch (err) {
    return 0
  }
}