Cancel disconnected offer analysis and stop remaining provider calls

This commit is contained in:
2026-09-06 10:22:29 +03:00
parent 673d6c1bc8
commit d534ea20b9
10 changed files with 110 additions and 22 deletions
+5 -2
View File
@@ -1,3 +1,4 @@
import { requestLifetime } from './request-lifetime.mjs';
import {documentReview,saveDocumentReview,reviewedAnalysisSource} from './document-review.mjs';
import { documentMetadataPatch, decodeDocumentUpload } from './document-metadata.mjs';
import { deadlineInfo } from '../src/services/tenderCalendar.js';
@@ -1457,9 +1458,10 @@ const server = http.createServer(async (req, res) => {
const user = userFromAuthHeader(req.headers['authorization']);
if (!user) return json(res, 401, { success: false, error: 'oturum yok' });
if (!aiConfigured()) return json(res, 503, { success: false, error: 'AI hizmeti şu anda kullanılamıyor. Daha sonra yeniden deneyin; sorun sürerse uygulama yöneticinize bildirin.' });
const lifetime = requestLifetime(req,res);
try {
const body = await readBody(req, 2 * 1024 * 1024);
const ortak = { ikn: body.ikn, tender: body.tender, chain: body.chain, text: body.text };
const ortak = { signal:lifetime.signal, ikn: body.ikn, tender: body.tender, chain: body.chain, text: body.text };
const out = url.pathname === '/api/ai/belge-sor'
? await belgeyeSor({ ...ortak, soru: body.soru })
: url.pathname === '/api/ai/teklif-denetim'
@@ -1467,8 +1469,9 @@ const server = http.createServer(async (req, res) => {
: await teklifTaslak({ ...ortak, tur: body.tur, firma: body.firma, belgeler: body.belgeler, fiyat: body.fiyat, gereklilikler: body.gereklilikler });
return json(res, 200, { success: true, ...out });
} catch (e) {
if (lifetime.signal.aborted) return;
return json(res, e.attempts ? 502 : 400, { success: false, error: e.message });
}
} finally { lifetime.dispose(); }
}
if (url.pathname === '/api/tenders') {