diff --git a/src/app/api/movie-requests/route.ts b/src/app/api/movie-requests/route.ts index ed0bb74..d8a271f 100644 --- a/src/app/api/movie-requests/route.ts +++ b/src/app/api/movie-requests/route.ts @@ -174,13 +174,9 @@ export async function POST(request: NextRequest) { await storage.createMovieRequest(newRequest); await storage.addUserMovieRequest(authInfo.username, newRequest.id); - // 更新频率限制 - 保存到用户信息的 hash 中 - if ('client' in storage && storage.client && typeof (storage.client as any).hSet === 'function') { - await (storage.client as any).hSet( - `user:${authInfo.username}:info`, - 'last_movie_request_time', - Date.now().toString() - ); + // 更新频率限制 - 使用抽象方法兼容所有存储类型 + if (storage.updateLastMovieRequestTime) { + await storage.updateLastMovieRequestTime(authInfo.username, Date.now()); // 清除用户信息缓存,确保下次读取到最新数据 const { userInfoCache } = await import('@/lib/user-cache'); diff --git a/src/lib/d1.db.ts b/src/lib/d1.db.ts index e8f150f..d9a9b69 100644 --- a/src/lib/d1.db.ts +++ b/src/lib/d1.db.ts @@ -1480,6 +1480,18 @@ export class D1Storage implements IStorage { throw err; } } + + async updateLastMovieRequestTime(userName: string, timestamp: number): Promise { + try { + await this.db + .prepare('UPDATE users SET last_movie_request_time = ? WHERE username = ?') + .bind(timestamp, userName) + .run(); + } catch (err) { + console.error('D1Storage.updateLastMovieRequestTime error:', err); + throw err; + } + } } /** diff --git a/src/lib/redis-base.db.ts b/src/lib/redis-base.db.ts index d702c2b..d04d960 100644 --- a/src/lib/redis-base.db.ts +++ b/src/lib/redis-base.db.ts @@ -1275,6 +1275,16 @@ export abstract class BaseRedisStorage implements IStorage { ); } + async updateLastMovieRequestTime(userName: string, timestamp: number): Promise { + await this.withRetry(() => + this.adapter.hSet( + this.userInfoKey(userName), + 'last_movie_request_time', + timestamp.toString() + ) + ); + } + // ---------- 求片相关 ---------- private movieRequestsKey() { return 'movie_requests:all'; diff --git a/src/lib/types.ts b/src/lib/types.ts index 2912a9c..bc71820 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -118,6 +118,9 @@ export interface IStorage { getLastFavoriteCheckTime(userName: string): Promise; setLastFavoriteCheckTime(userName: string, timestamp: number): Promise; + // 求片冷却时间 + updateLastMovieRequestTime?(userName: string, timestamp: number): Promise; + // 求片相关 getAllMovieRequests(): Promise; getMovieRequest(requestId: string): Promise;