d1求片冷却

This commit is contained in:
mtvpls
2026-01-30 17:47:30 +08:00
parent ca18aef7c4
commit 3feaac91d4
4 changed files with 28 additions and 7 deletions

View File

@@ -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');

View File

@@ -1480,6 +1480,18 @@ export class D1Storage implements IStorage {
throw err;
}
}
async updateLastMovieRequestTime(userName: string, timestamp: number): Promise<void> {
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;
}
}
}
/**

View File

@@ -1275,6 +1275,16 @@ export abstract class BaseRedisStorage implements IStorage {
);
}
async updateLastMovieRequestTime(userName: string, timestamp: number): Promise<void> {
await this.withRetry(() =>
this.adapter.hSet(
this.userInfoKey(userName),
'last_movie_request_time',
timestamp.toString()
)
);
}
// ---------- 求片相关 ----------
private movieRequestsKey() {
return 'movie_requests:all';

View File

@@ -118,6 +118,9 @@ export interface IStorage {
getLastFavoriteCheckTime(userName: string): Promise<number>;
setLastFavoriteCheckTime(userName: string, timestamp: number): Promise<void>;
// 求片冷却时间
updateLastMovieRequestTime?(userName: string, timestamp: number): Promise<void>;
// 求片相关
getAllMovieRequests(): Promise<MovieRequest[]>;
getMovieRequest(requestId: string): Promise<MovieRequest | null>;