Fix conversation failure handling and confirmed delivery memories
This commit is contained in:
@@ -10,7 +10,7 @@ export type ConversationRequest={
|
||||
receiver:string;
|
||||
selectedPlayer:string;
|
||||
nearbyBots:string[];
|
||||
status:'pending'|'processing'|'completed'|'failed';
|
||||
status:'pending'|'processing'|'awaiting_delivery'|'completed'|'failed';
|
||||
attempts:number;
|
||||
};
|
||||
|
||||
@@ -124,3 +124,20 @@ export async function cleanupConversations(db:D1Database){
|
||||
WHERE status IN ('completed','failed') AND completed_at IS NOT NULL AND completed_at<?`)
|
||||
.bind(before).run();
|
||||
}
|
||||
|
||||
export async function awaitDelivery(db:D1Database,request:ConversationRequest,botId:string,reply:string,commandId:string){
|
||||
await db.prepare("UPDATE conversation_requests SET status='awaiting_delivery',result=? WHERE id=?")
|
||||
.bind(JSON.stringify({request,botId,reply,commandId}),request.id).run();
|
||||
}
|
||||
|
||||
export async function pendingDeliveries(db:D1Database){
|
||||
await ensure(db);
|
||||
const rows=await db.prepare("SELECT result FROM conversation_requests WHERE status='awaiting_delivery' ORDER BY created_at LIMIT 50").all<{result:string}>();
|
||||
const deliveries=[];
|
||||
for(const row of rows.results){
|
||||
const delivery=JSON.parse(row.result) as {request:ConversationRequest;botId:string;reply:string;commandId:string};
|
||||
const command=await db.prepare('SELECT status,error FROM ale_commands WHERE id=?').bind(delivery.commandId).first<{status:string;error:string|null}>();
|
||||
deliveries.push({...delivery,status:command?.status??'pending',error:command?.error});
|
||||
}
|
||||
return deliveries;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user