Ensure video titles and metadata reflect database edits
Update video fetching logic to merge database edits with CDN content, fixing issues with displayed titles and ensuring data consistency across the platform. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 2cd2c0bc-434c-4bc9-ad3f-b99d3897a0d1 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8cc42625-c1f5-4e43-99bd-77f2c4dedee2/2cd2c0bc-434c-4bc9-ad3f-b99d3897a0d1/DVlzRoR
This commit is contained in:
+15
-36
@@ -797,7 +797,7 @@ class BunnyStorage implements IStorage {
|
||||
|
||||
async getVideos(limit = 20, offset = 0, search?: string): Promise<Video[]> {
|
||||
console.log(`Fetching videos from cache: limit=${limit}, offset=${offset}, search=${search}`);
|
||||
const result = videoSyncService.getVideos(limit, offset, search);
|
||||
const result = await videoSyncService.getVideos(limit, offset, search);
|
||||
console.log(`Returning ${result.videos.length} videos from cache (age: ${result.cacheAge}ms)`);
|
||||
|
||||
// Apply face detection data from cache
|
||||
@@ -808,36 +808,18 @@ class BunnyStorage implements IStorage {
|
||||
}
|
||||
|
||||
async getVideo(id: string): Promise<Video | undefined> {
|
||||
// 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;
|
||||
// Use videoSyncService which now merges with database edits
|
||||
const video = await videoSyncService.getVideo(id);
|
||||
if (!video) return undefined;
|
||||
|
||||
// Apply cached view counts
|
||||
if (this.viewsCache.has(video.id)) {
|
||||
video.views += this.viewsCache.get(video.id)!;
|
||||
}
|
||||
|
||||
// Fallback to direct API call
|
||||
try {
|
||||
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;
|
||||
} catch (error) {
|
||||
console.error(`Error fetching video ${id} from Bunny:`, error);
|
||||
return undefined;
|
||||
}
|
||||
// Apply face detection data from cache
|
||||
const faceData = this.faceDataCache.get(video.id);
|
||||
return faceData ? { ...video, ...faceData } : video;
|
||||
}
|
||||
|
||||
async createVideo(video: InsertVideo): Promise<Video> {
|
||||
@@ -860,15 +842,12 @@ class BunnyStorage implements IStorage {
|
||||
console.warn(`Database update failed for video ${id}, using cache:`, dbError);
|
||||
}
|
||||
|
||||
// If database update was successful, just update local cache - don't sync from Bunny.net
|
||||
// If database update was successful, force video sync refresh
|
||||
if (dbUpdateSuccessful) {
|
||||
try {
|
||||
const existing = this.videos.get(id);
|
||||
if (existing) {
|
||||
const updatedVideo = { ...existing, ...updates, updatedAt: new Date() };
|
||||
this.videos.set(id, updatedVideo);
|
||||
console.log(`Updated video ${id} in local cache`);
|
||||
}
|
||||
// Force videoSyncService to refresh this specific video
|
||||
console.log(`Updated video ${id} in database, forcing cache refresh`);
|
||||
videoSyncService.forceVideoRefresh(id);
|
||||
} catch (cacheError) {
|
||||
console.warn('Failed to update local cache after video update:', cacheError);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user