From 9f991a203a6872eccbf490b9cee8537bad5eb21f Mon Sep 17 00:00:00 2001 From: sebastjanartic <45803536-sebastjanartic@users.noreply.replit.com> Date: Sun, 11 Jan 2026 09:24:10 +0000 Subject: [PATCH] Simplify video view tracking to rely solely on CDN Remove local view caching and database update logic, now using CDN-provided view counts. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 401e2ec0-e00d-4f10-9d0e-60f3d479f9a5 Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Event-Id: 96faccf6-c704-4d5c-9214-e2d98ff0726c Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/60d372ff-2c10-46c7-b01b-10c3435136b0/401e2ec0-e00d-4f10-9d0e-60f3d479f9a5/1EjgdCg --- server/storage.ts | 30 +++--------------------------- 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/server/storage.ts b/server/storage.ts index 83e5e9e..a650a08 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -788,7 +788,6 @@ export class MemStorage implements IStorage { // Use Bunny.net storage if API keys are available, otherwise fallback to memory storage class BunnyStorage implements IStorage { private bunnyService: BunnyService; - private viewsCache: Map = new Map(); private faceDataCache: Map = new Map(); constructor() { @@ -811,11 +810,6 @@ class BunnyStorage implements IStorage { // Try cache first for faster loading const cachedVideo = videoSyncService.getVideos(100, 0).videos.find(v => v.id === id); if (cachedVideo) { - // Apply cached view counts - if (this.viewsCache.has(cachedVideo.id)) { - cachedVideo.views += this.viewsCache.get(cachedVideo.id)!; - } - // Apply face detection data from cache const faceData = this.faceDataCache.get(cachedVideo.id); return faceData ? { ...cachedVideo, ...faceData } : cachedVideo; @@ -826,11 +820,6 @@ class BunnyStorage implements IStorage { const video = await this.bunnyService.getVideo(id); if (!video) return undefined; - // Apply cached view counts - if (this.viewsCache.has(video.id)) { - video.views += this.viewsCache.get(video.id)!; - } - // Apply face detection data from cache const faceData = this.faceDataCache.get(video.id); return faceData ? { ...video, ...faceData } : video; @@ -881,10 +870,6 @@ class BunnyStorage implements IStorage { this.faceDataCache.set(id, { ...existing, ...faceData }); } - // Update views cache if present - if (updates.views !== undefined && typeof updates.views === 'number') { - this.viewsCache.set(id, updates.views); - } // Return updated video return await this.getVideo(id); @@ -987,18 +972,9 @@ class BunnyStorage implements IStorage { } async updateVideoViews(id: string): Promise { - try { - // Persist view count increment to PostgreSQL database - await db.update(videos) - .set({ views: sql`${videos.views} + 1` }) - .where(eq(videos.id, id)); - console.log(`✅ View count incremented for video ${id} in database`); - } catch (error) { - console.error(`❌ Failed to update view count for video ${id}:`, error); - // Fallback to memory cache if database fails - const currentViews = this.viewsCache.get(id) || 0; - this.viewsCache.set(id, currentViews + 1); - } + // Views are tracked automatically by Bunny.net CDN when videos are played + // No additional tracking needed - views are fetched fresh every 5 minutes from Bunny.net API + console.log(`Video ${id} played - views tracked by Bunny.net CDN`); } async getVideoCount(search?: string): Promise {