+ 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 `views-${videoUUID}-${ip}`
+ }
+
+ private generateContactFormKey (ip: string) {
+ return 'contact-form-' + ip
+ }
+
+ /* ************ Redis helpers ************ */
+