d1求片冷却
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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>;
|
||||
|
||||
Reference in New Issue
Block a user