fix: il adları kaynaklar arasında bölünüyordu (Ankara / ANKARA)
Sorun: ilan.gov.tr illeri 'Ankara' biçiminde, EKAP arşivi/DT 'ANKARA' biçiminde veriyordu. İl filtresi birebir string karşılaştırdığı için kullanıcı 'Ankara' seçtiğinde 161 'ANKARA' kaydı görünmüyordu. 81 ilin hepsi çift kayıtlıydı (162 farklı il değeri). - server/tr-text.mjs: Türkçe duyarlı titleCaseTr / normTr yardımcıları - history-store + dt-store: il adı okunurken tek biçime indiriliyor (mevcut kayıtlar için de geçerli, yeniden tarama gerekmiyor) - TenderList: il filtresi normalize karşılaştırma yapıyor (savunma katmanı)
This commit is contained in:
+2
-1
@@ -6,6 +6,7 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { titleCaseTr } from './tr-text.mjs';
|
||||
|
||||
// node:sqlite bazı Node sürümlerinde deneysel/flag'li. Yoksa DT devre dışı kalır,
|
||||
// ilan.gov.tr canlı verisi yine de çalışır.
|
||||
@@ -66,7 +67,7 @@ function mapDtRow(row) {
|
||||
ikn: row.dtn || '',
|
||||
baslik: row.isin_adi || '',
|
||||
kurum,
|
||||
sehir: row.ili && !row.ili.startsWith('Plaka') ? row.ili : '',
|
||||
sehir: row.ili && !row.ili.startsWith('Plaka') ? titleCaseTr(row.ili) : '',
|
||||
bolge: '',
|
||||
tarih: row.dt_tarihi || '',
|
||||
saat: '',
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { titleCaseTr } from './tr-text.mjs';
|
||||
|
||||
let DatabaseSync = null;
|
||||
try {
|
||||
@@ -148,7 +149,7 @@ function rowToTender(r) {
|
||||
ikn: r.ikn,
|
||||
baslik: r.ihale_adi || 'İhale',
|
||||
kurum: r.idare_adi || '—',
|
||||
sehir: r.il || '',
|
||||
sehir: titleCaseTr(r.il),
|
||||
tarih: r.ihale_tarihi || '',
|
||||
alimTuru: r.ihale_tipi || 'İhale',
|
||||
sektor: r.ihale_tipi || 'Genel',
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Türkçe metin yardımcıları.
|
||||
* Kaynaklar il adını farklı yazıyor (ilan.gov.tr "Ankara", EKAP "ANKARA");
|
||||
* tek biçime indirgemezsek il filtresi ve gruplamalar bölünüyor.
|
||||
*/
|
||||
|
||||
/** "İSTANBUL" → "İstanbul", "şanlıurfa" → "Şanlıurfa" (Türkçe i/ı duyarlı) */
|
||||
export function titleCaseTr(s) {
|
||||
if (!s) return '';
|
||||
return String(s)
|
||||
.trim()
|
||||
.toLocaleLowerCase('tr-TR')
|
||||
.split(/(\s+|-)/)
|
||||
.map((w) => (/^[\s-]*$/.test(w) ? w : w.charAt(0).toLocaleUpperCase('tr-TR') + w.slice(1)))
|
||||
.join('');
|
||||
}
|
||||
|
||||
/** Karşılaştırma için normalize (büyük harf, Türkçe duyarlı) */
|
||||
export function normTr(s) {
|
||||
return String(s || '').trim().toLocaleUpperCase('tr-TR');
|
||||
}
|
||||
Reference in New Issue
Block a user