This commit is contained in:
jonathang4 2025-08-27 19:10:52 +08:00
parent 490a9058b3
commit 46fd921b23
3 changed files with 50 additions and 6 deletions

View File

@ -44,6 +44,8 @@ db.jimeng_free_generation_tasks.createIndex({
db.jimeng_free_generation_results.createIndex({ "task_id": 1 }, { unique: true });
db.jimeng_free_generation_results.createIndex({ "server_id": 1 });
db.jimeng_free_generation_results.createIndex({ "created_at": 1 });
db.jimeng_free_generation_results.createIndex({ "is_read": 1 });
db.jimeng_free_generation_results.createIndex({ "first_read_at": 1 });
// TTL索引 - 自动清理过期记录
db.jimeng_free_generation_results.createIndex({
@ -57,6 +59,12 @@ db.jimeng_free_generation_results.createIndex({
"server_id": 1,
"created_at": 1
});
// 复合索引 - 用于查询已读取/未读取的结果
db.jimeng_free_generation_results.createIndex({
"is_read": 1,
"created_at": 1
});
```
### 3. 服务器心跳表 (jimeng_servers)
@ -97,8 +105,11 @@ print("创建生成结果表索引...");
db.jimeng_free_generation_results.createIndex({ "task_id": 1 }, { unique: true });
db.jimeng_free_generation_results.createIndex({ "server_id": 1 });
db.jimeng_free_generation_results.createIndex({ "created_at": 1 });
db.jimeng_free_generation_results.createIndex({ "is_read": 1 });
db.jimeng_free_generation_results.createIndex({ "first_read_at": 1 });
db.jimeng_free_generation_results.createIndex({ "expires_at": 1 }, { expireAfterSeconds: 0 });
db.jimeng_free_generation_results.createIndex({ "server_id": 1, "created_at": 1 });
db.jimeng_free_generation_results.createIndex({ "is_read": 1, "created_at": 1 });
print("创建服务器心跳表索引...");
db.jimeng_servers.createIndex({ "server_id": 1 }, { unique: true });

View File

@ -24,6 +24,11 @@ export interface IGenerationResult extends Document {
// 时间管理
created_at: number; // 创建时间戳(秒)
expires_at: number; // 过期时间戳用于自动清理默认24小时后
// 读取状态
is_read: boolean; // 是否已被读取
first_read_at?: number; // 首次读取时间戳(秒)
read_count: number; // 读取次数
}
const GenerationResultSchema: Schema = new Schema({
@ -69,10 +74,24 @@ const GenerationResultSchema: Schema = new Schema({
expires_at: {
type: Number,
required: true
},
is_read: {
type: Boolean,
default: false
},
first_read_at: {
type: Number
},
read_count: {
type: Number,
default: 0
}
}, {
collection: 'jimeng_free_generation_results',
timestamps: false // 使用自定义时间戳
});
// 添加TTL索引自动清理过期数据
GenerationResultSchema.index({ expires_at: 1 }, { expireAfterSeconds: 0 });
export default mongoose.model<IGenerationResult>('GenerationResult', GenerationResultSchema);

View File

@ -147,7 +147,7 @@ export class DatabaseGenerationService {
/**
*
*
* TTL自动清理过期数据
*/
async queryTaskResult(taskId: string): Promise<any> {
try {
@ -155,7 +155,24 @@ export class DatabaseGenerationService {
const result = await GenerationResult.findOne({ task_id: taskId });
if (result) {
// 找到结果,返回并清理
// 找到结果,标记为已读取
const currentTime = Math.floor(Date.now() / 1000);
const updateData: any = {
read_count: (result.read_count || 0) + 1
};
// 如果是首次读取,记录首次读取时间
if (!result.is_read) {
updateData.is_read = true;
updateData.first_read_at = currentTime;
}
// 更新读取状态
await GenerationResult.updateOne(
{ task_id: taskId },
{ $set: updateData }
);
const response = {
created: Math.floor(Date.now() / 1000),
data: {
@ -165,10 +182,7 @@ export class DatabaseGenerationService {
}
};
// 删除结果记录(一次性消费)
await GenerationResult.deleteOne({ task_id: taskId });
logger.info(`Task result retrieved and cleaned: ${taskId}, status: ${result.status}`);
logger.info(`Task result retrieved: ${taskId}, status: ${result.status}, read_count: ${updateData.read_count}`);
return response;
}