36 lines
1.8 KiB
JavaScript
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;
|
|
}
|