diff --git a/server/ai-job-store.mjs b/server/ai-job-store.mjs index d3539a6..e8f994a 100644 --- a/server/ai-job-store.mjs +++ b/server/ai-job-store.mjs @@ -68,8 +68,11 @@ export function claimAiJob(clock=Date.now()) { }); } export const heartbeatAiJob=(id,runId)=>dbWork(db=>db.prepare("UPDATE ai_jobs SET heartbeat=? WHERE id=? AND run_id=? AND state='running'").run(Date.now(),id,runId).changes>0); -export const finishAiJob=(id,runId,result,error=null)=>dbWork(db=>db.prepare("UPDATE ai_jobs SET state=?,result=?,error=?,updated_at=? WHERE id=? AND run_id=? AND state='running'") - .run(error?'failed':'completed',error?null:JSON.stringify(result),error,new Date().toISOString(),id,runId).changes>0); +export const finishAiJob=(id,runId,result,error=null)=>{ + if(!error && (!result || typeof result!=='object' || Array.isArray(result))) throw new Error('AI sonucu geçersiz; iş tamamlanmadı.'); + return dbWork(db=>db.prepare("UPDATE ai_jobs SET state=?,result=?,error=?,updated_at=? WHERE id=? AND run_id=? AND state='running'") + .run(error?'failed':'completed',error?null:JSON.stringify(result),error,new Date().toISOString(),id,runId).changes>0); +}; export const cancelAiJob=(email,id)=>dbWork(db=>db.prepare("UPDATE ai_jobs SET state='cancelled',error=NULL,updated_at=? WHERE id=? AND email=? AND state IN ('queued','running','interrupted','failed')").run(new Date().toISOString(),id,email).changes>0); export const retryAiJob=(email,id)=>dbWork(db=>{ db.exec('BEGIN IMMEDIATE');