refactor: /sonuc senkron kompozisyona geçti (Faz 9)

- liste-queries.ts (siraylaProgramAra) ve sihirbaz-queries.ts
  (getSihirbazFacetleri) eklendi — /sonuc'un SQLite okumaları feature
  sorgularına indi
- Yeni sunucu sarmalayıcıları: SonucProgramTablosu (+skeleton),
  TadimlikBolumu (girişliyse null — gruplu sınırda skeleton bilerek yok),
  SonucSihirbazi (session + rapor-varlığı + facetler içeride; client
  orkestratöre çözülmüş değerler iner)
- Sayfa senkron: searchParams.then() içinde sıra doğrulaması; geçersiz sıra
  SiraGerekli'ye düşer; geçerli akışta tablo+tadımlık+sihirbaz+dipnot+footer
  tek gruplu Suspense'te (bugünkü tek await'li akışla aynı anda belirir)
- sonuc/loading.tsx silindi; geometrisi sayfadaki fallback'te yaşıyor
- Davranış değişikliği yok (getSession React cache ile tek okuma)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-08-08 01:42:32 +03:00
parent fbd184e2be
commit 22e2fde058
7 changed files with 187 additions and 94 deletions

View File

@@ -0,0 +1,22 @@
import { getSession } from "@/lib/session";
import { tadimlikSec } from "../rapor-queries";
import { TadimlikSatiri } from "./tadimlik-satiri";
import type { PuanTuruKey } from "@/types/yokatlas";
// Girişsiz tadımlık (İP-B): SSR'da kovaya uyan "genel" satır seçilir;
// sihirbaz kategorisi client'ta okunup /api/tadimlik ile kişiselleştirilir.
// Girişli kullanıcı gerçek ürünü zaten görebildiği için tadımlık almaz —
// bu bileşen o durumda hiç render edilmez (skeleton bilerek yok; sayfadaki
// gruplu Suspense sınırı yer ayırmaz).
export async function TadimlikBolumu({
sira,
tur,
}: {
sira: number;
tur: PuanTuruKey;
}) {
const session = await getSession();
if (session) return null;
const ilk = await tadimlikSec(sira, tur);
return <TadimlikSatiri sira={sira} tur={tur} ilk={ilk} />;
}