fix(veri): tadımlık örneği canlı tabanı gösterir; sunucudan gelen liste riskleri yeniden hesaplanır
Yayın sonrası denetim (2026-09-21): - tadımlık havuzu snapshot'ı 2025 tabanını taşıyordu: örnek satır 'Tıp ~5.118, az riskli' derken aynı sayfadaki tablo 4.481 gösteriyordu. Taban ve sıra geçmişi artık okuma anında canlı DB'den; güncel kılavuzdan çıkmış program örnek gösterilmez (sıradaki kategoriye düşülür) - sunucuylaBirlestir riskleri her zaman yeniler: sunucu kaydı taze taban + başka cihazın bayat riskini taşıyabiliyordu Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -152,9 +152,11 @@ export function sunucuylaBirlestir(sunucuItems: ManuelTercih[]): ManuelTercih[]
|
|||||||
liste = [...liste, ...ekler].slice(0, MANUEL_LISTE_MAX);
|
liste = [...liste, ...ekler].slice(0, MANUEL_LISTE_MAX);
|
||||||
kaydet();
|
kaydet();
|
||||||
yayinla();
|
yayinla();
|
||||||
// Başka cihazda profilsiz eklenmiş kayıtlar risksiz gelir; profil lokalde
|
// Sunucudan gelen kayıtların riski başka cihazın o günkü tabanına göredir
|
||||||
// zaten varsa PROFIL_DEGISTI_EVENT yayılmaz, riski burada doldur.
|
// (ya da profilsiz eklendiyse hiç yoktur); sunucu tabanı tazeler ama riski
|
||||||
if (liste.some((t) => t.risk == null)) riskleriYenile();
|
// yenilemez. Profil lokalde varsa hepsini güncel tabanla yeniden hesapla
|
||||||
|
// (profil yoksa riskleriYenile zaten işlem yapmaz).
|
||||||
|
riskleriYenile();
|
||||||
return liste;
|
return liste;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -210,6 +210,14 @@ export function netlerGetir(programId: string): ProgramNetSatiri[] {
|
|||||||
.all(programId) as ProgramNetSatiri[];
|
.all(programId) as ProgramNetSatiri[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Güncel kılavuzdaki tek program; arşivlenmiş ya da bilinmeyen id'de null. */
|
||||||
|
export function programGetir(id: string): Program | null {
|
||||||
|
const row = getDb()
|
||||||
|
.prepare(`SELECT ${SELECT_COLS} FROM programs WHERE id = ?`)
|
||||||
|
.get(id) as ProgramHamSatiri | undefined;
|
||||||
|
return row ? programSatiri(row) : null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Kayıtlı manuel liste satırlarının güncel efektif sırası (son yıl, yoksa bir
|
* Kayıtlı manuel liste satırlarının güncel efektif sırası (son yıl, yoksa bir
|
||||||
* önceki). Kayıtlar efektif sırayı ekleme anının snapshot'ı olarak taşır; yeni
|
* önceki). Kayıtlar efektif sırayı ekleme anının snapshot'ı olarak taşır; yeni
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ import type { Dilim } from "./rapor-havuzu";
|
|||||||
import type { RaporSonuc } from "@/features/rapor/types/rapor";
|
import type { RaporSonuc } from "@/features/rapor/types/rapor";
|
||||||
import { dilimdenRisk, riskHesapla, riskNotuMetni } from "./risk";
|
import { dilimdenRisk, riskHesapla, riskNotuMetni } from "./risk";
|
||||||
import { trendOzetiMetni } from "./trend";
|
import { trendOzetiMetni } from "./trend";
|
||||||
import { VERI_YIL_SAYISI } from "./veri-yillari";
|
import { ILK_YIL, VERI_YIL_SAYISI } from "./veri-yillari";
|
||||||
|
import { programGetir } from "./db";
|
||||||
|
|
||||||
/** Sihirbaz kategorisi seçilmemiş kullanıcı için kova×tür başına fallback satır. */
|
/** Sihirbaz kategorisi seçilmemiş kullanıcı için kova×tür başına fallback satır. */
|
||||||
export const GENEL_KATEGORI = "genel";
|
export const GENEL_KATEGORI = "genel";
|
||||||
@@ -123,7 +124,18 @@ export async function tadimlikSec(
|
|||||||
),
|
),
|
||||||
});
|
});
|
||||||
if (satir && gerekceServisEdilebilir(satir.gerekce)) {
|
if (satir && gerekceServisEdilebilir(satir.gerekce)) {
|
||||||
const program = satir.program as RaporSonuc["programlar"][string];
|
// Havuz batch'te üretilir ve yeni yerleştirme yılı yüklenince bayatlar:
|
||||||
|
// snapshot'taki taban/geçmiş yerine CANLI veri servis edilir ki örnek
|
||||||
|
// satır aynı sayfadaki tabloyla çelişmesin. Güncel kılavuzdan çıkmış
|
||||||
|
// (arşivlenmiş) program örnek gösterilmez — sıradaki kategoriye düşülür.
|
||||||
|
const canli = programGetir(satir.programId);
|
||||||
|
if (!canli) continue;
|
||||||
|
const program: RaporSonuc["programlar"][string] = {
|
||||||
|
...(satir.program as RaporSonuc["programlar"][string]),
|
||||||
|
efektifSira: canli.efektifSira,
|
||||||
|
siraGecmisi: canli.siraGecmisi,
|
||||||
|
ilkYil: ILK_YIL,
|
||||||
|
};
|
||||||
return {
|
return {
|
||||||
programId: satir.programId,
|
programId: satir.programId,
|
||||||
dilim: satir.dilim,
|
dilim: satir.dilim,
|
||||||
|
|||||||
Reference in New Issue
Block a user