+ async getVideosIdViewed (hour: number) {
+ const key = this.generateVideosViewKey(hour)
+
+ const stringIds = await this.getSet(key)
+ return stringIds.map(s => parseInt(s, 10))
+ }
+
+ deleteVideoViews (videoId: number, hour: number) {
+ const keySet = this.generateVideosViewKey(hour)
+ const keyIncr = this.generateVideoViewKey(videoId, hour)
+
+ return Promise.all([
+ this.deleteFromSet(keySet, videoId.toString()),
+ this.deleteKey(keyIncr)
+ ])
+ }
+
+ /************* Keys generation *************/
+
+ generateCachedRouteKey (req: express.Request) {
+ return req.method + '-' + req.originalUrl
+ }
+
+ private generateVideosViewKey (hour?: number) {
+ if (!hour) hour = new Date().getHours()
+
+ return `videos-view-h${hour}`
+ }
+
+ private generateVideoViewKey (videoId: number, hour?: number) {
+ if (!hour) hour = new Date().getHours()
+
+ return `video-view-${videoId}-h${hour}`
+ }
+
+ private generateResetPasswordKey (userId: number) {
+ return 'reset-password-' + userId
+ }
+
+ private generateVerifyEmailKey (userId: number) {
+ return 'verify-email-' + userId
+ }
+
+ private generateViewKey (ip: string, videoUUID: string) {
+ return videoUUID + '-' + ip
+ }
+
+ /************* Redis helpers *************/
+