d1求片冷却
This commit is contained in:
@@ -174,13 +174,9 @@ export async function POST(request: NextRequest) {
|
|||||||
await storage.createMovieRequest(newRequest);
|
await storage.createMovieRequest(newRequest);
|
||||||
await storage.addUserMovieRequest(authInfo.username, newRequest.id);
|
await storage.addUserMovieRequest(authInfo.username, newRequest.id);
|
||||||
|
|
||||||
// 更新频率限制 - 保存到用户信息的 hash 中
|
// 更新频率限制 - 使用抽象方法兼容所有存储类型
|
||||||
if ('client' in storage && storage.client && typeof (storage.client as any).hSet === 'function') {
|
if (storage.updateLastMovieRequestTime) {
|
||||||
await (storage.client as any).hSet(
|
await storage.updateLastMovieRequestTime(authInfo.username, Date.now());
|
||||||
`user:${authInfo.username}:info`,
|
|
||||||
'last_movie_request_time',
|
|
||||||
Date.now().toString()
|
|
||||||
);
|
|
||||||
|
|
||||||
// 清除用户信息缓存,确保下次读取到最新数据
|
// 清除用户信息缓存,确保下次读取到最新数据
|
||||||
const { userInfoCache } = await import('@/lib/user-cache');
|
const { userInfoCache } = await import('@/lib/user-cache');
|
||||||
|
|||||||
@@ -1480,6 +1480,18 @@ export class D1Storage implements IStorage {
|
|||||||
throw err;
|
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() {
|
private movieRequestsKey() {
|
||||||
return 'movie_requests:all';
|
return 'movie_requests:all';
|
||||||
|
|||||||
@@ -118,6 +118,9 @@ export interface IStorage {
|
|||||||
getLastFavoriteCheckTime(userName: string): Promise<number>;
|
getLastFavoriteCheckTime(userName: string): Promise<number>;
|
||||||
setLastFavoriteCheckTime(userName: string, timestamp: number): Promise<void>;
|
setLastFavoriteCheckTime(userName: string, timestamp: number): Promise<void>;
|
||||||
|
|
||||||
|
// 求片冷却时间
|
||||||
|
updateLastMovieRequestTime?(userName: string, timestamp: number): Promise<void>;
|
||||||
|
|
||||||
// 求片相关
|
// 求片相关
|
||||||
getAllMovieRequests(): Promise<MovieRequest[]>;
|
getAllMovieRequests(): Promise<MovieRequest[]>;
|
||||||
getMovieRequest(requestId: string): Promise<MovieRequest | null>;
|
getMovieRequest(requestId: string): Promise<MovieRequest | null>;
|
||||||
|
|||||||
Reference in New Issue
Block a user