Persist observed tender source revisions and expose paginated history
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { observeTenders, tenderHistory } from './tender-history.mjs';
|
||||
import { requestLifetime } from './request-lifetime.mjs';
|
||||
import {documentReview,saveDocumentReview,reviewedAnalysisSource} from './document-review.mjs';
|
||||
import { documentMetadataPatch, decodeDocumentUpload } from './document-metadata.mjs';
|
||||
@@ -582,6 +583,11 @@ async function getDetail(ilanId) {
|
||||
const raw = await ilanDetail(ilanId);
|
||||
const text = htmlToText(raw.content || '');
|
||||
const detail = { ...announcementFields(text), adNo: raw.adNo || null };
|
||||
const sourceTender=cache.tenders.find(t=>t.id===`ilan-${ilanId}`);
|
||||
if(sourceTender) {
|
||||
try { observeTenders([{...sourceTender,...detail,id:`ilan-${ilanId}:detail`}]); }
|
||||
catch { detail.sourceWarning='İlan alındı ancak kaynak geçmişi kaydedilemedi.'; }
|
||||
}
|
||||
cache.detail.set(ilanId, detail);
|
||||
if (cache.detail.size > 500) cache.detail.delete(cache.detail.keys().next().value);
|
||||
return detail;
|
||||
@@ -661,6 +667,8 @@ async function tendersPayload(force = false) {
|
||||
}
|
||||
|
||||
const combined = uniqueTenders([...dt.tenders, ...c.tenders, ...hist.tenders]);
|
||||
let historyWarning=null;
|
||||
try { observeTenders(combined); } catch { historyWarning='Kaynak geçmişi kaydedilemedi; değişiklik arşivi eksik olabilir.'; };
|
||||
return {
|
||||
success: true,
|
||||
source: sources.join(' + '),
|
||||
@@ -669,6 +677,7 @@ async function tendersPayload(force = false) {
|
||||
ilanCount: c.totalCount,
|
||||
todayCount: bugunEklenenSayisi(combined),
|
||||
loadedUniqueCount: combined.length,
|
||||
historyWarning,
|
||||
dtCount: dt.totalCount,
|
||||
historyCount: hist.totalCount,
|
||||
tenders: combined,
|
||||
@@ -1476,6 +1485,15 @@ const server = http.createServer(async (req, res) => {
|
||||
} finally { lifetime.dispose(); }
|
||||
}
|
||||
|
||||
if (url.pathname === '/api/tenders/source-history') {
|
||||
if (!userFromAuthHeader(req.headers.authorization)) return json(res,401,{success:false,error:'Oturum gerekli.'});
|
||||
if (req.method !== 'GET') return json(res,405,{success:false,error:'Desteklenmeyen metot.'});
|
||||
const before=url.searchParams.get('before');
|
||||
if(before && (!/^\d+$/.test(before) || !Number.isSafeInteger(Number(before)))) return json(res,400,{success:false,error:'Geçersiz sayfa.'});
|
||||
try { return json(res,200,{success:true,...tenderHistory({ikn:url.searchParams.get('ikn'),kurum:url.searchParams.get('kurum')},{before:before?Number(before):null})}); }
|
||||
catch { return json(res,503,{success:false,error:'Kaynak geçmişi alınamadı. Yeniden deneyin.'}); }
|
||||
}
|
||||
|
||||
if (url.pathname === '/api/tenders') {
|
||||
const out = await tendersPayload(url.searchParams.get('refresh') === '1');
|
||||
return json(res, 200, out);
|
||||
|
||||
Reference in New Issue
Block a user