Files
ihaleist/server/brief-content.mjs

36 lines
1.8 KiB
JavaScript

/** Assemble every tracked result in the previous seven Istanbul calendar dates. */
export function createBriefBuilder({ trackedKeys, upcoming, results, parseDate }) {
return function buildBrief(email, tenders, now = new Date()) {
const yaklasan = upcoming(email, tenders, 7, now);
const today = new Date(now.getTime() + 3 * 3600000).toISOString().slice(0,10);
const end = Date.parse(today + 'T00:00:00+03:00');
const start = end - 7 * 86400000;
const dated = [];
for (const ikn of new Set(trackedKeys(email))) {
for (const result of results(ikn) || []) {
const date = parseDate(result.sozlesmeTarihi) || parseDate(result.tarih);
if (!date || date.getTime() < start || date.getTime() >= end) continue;
dated.push({ timestamp:date.getTime(), value:{ ikn, baslik:result.baslik, kazanan:result.kazananFirma,
bedel:result.sozlesmeBedeli, birim:result.paraBirimi, teklif:result.teklifSayisi } });
}
}
dated.sort((a,b) => b.timestamp-a.timestamp || String(a.value.ikn).localeCompare(String(b.value.ikn),'tr'));
const sonuclar = dated.map(row=>row.value);
const hafta = now.toLocaleDateString('tr-TR', { timeZone:'Europe/Istanbul', day:'2-digit', month:'long', year:'numeric' });
return { hafta, yaklasan, sonuclar, bos:!yaklasan.length && !sonuclar.length };
};
}
/** Keep UTF-16 surrogate pairs intact while bounding each Telegram message. */
export function splitBriefText(text, limit=3900) {
if (!Number.isInteger(limit) || limit < 2 || limit > 3900) throw new Error('Geçersiz mesaj uzunluğu.');
const parts=[];
let part='';
for (const char of String(text)) {
if (part.length + char.length > limit) { parts.push(part); part=''; }
part += char;
}
if (part) parts.push(part);
return parts;
}