feat(olcum): liste_uretim_basladi olayı — üretim denemesinin paydası

Bugüne kadar yalnız başarı (liste_olusturuldu) ölçülüyordu; kaç kişinin
üretimi denediği bilinmiyordu. /listem?uret=1 ile üretim gövdesi mount
olduğunda yeni bileşen `liste_uretim_basladi` atar.

Olay bilerek liste-uretici.tsx'e değil, listem-icerik.tsx'te ona kardeş
mount edilen yeni bir istemci bileşenine kondu (o dosya bu turda başka bir
işin altında). İkisi aynı `uret` dalında render edildiği için koşulları
birebir aynı.

`kaynak` URL'den, yani kullanıcı denetiminden geldiği için allowlist'ten
geçirilir; listede olmayan değer "bilinmiyor" raporlanır. Giriş
round-trip'inde değerin kaybolmaması için geriYol da kaynağı taşır —
`uret=1` her zaman ilk parametre kalır (giris-karti.tsx:31 sözleşmesi).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-22 01:18:15 +03:00
parent e21cda4d6f
commit f60fbd135d
4 changed files with 112 additions and 9 deletions

View File

@@ -20,12 +20,18 @@ export const metadata: Metadata = {
export default function ListemPage({
searchParams,
}: {
searchParams: Promise<{ acildi?: string; uret?: string }>;
// kaynak: üretim denemesini hangi yüzeyin başlattığı (bkz.
// uretim-basladi-olayi.tsx). Doğrulaması okuyan tarafta, allowlist ile.
searchParams: Promise<{ acildi?: string; uret?: string; kaynak?: string }>;
}) {
return (
<Suspense fallback={<ListemIcerikSkeleton />}>
{searchParams.then(({ acildi, uret }) => (
<ListemIcerik uret={uret === "1"} acildi={acildi === "1"} />
{searchParams.then(({ acildi, uret, kaynak }) => (
<ListemIcerik
uret={uret === "1"}
acildi={acildi === "1"}
kaynak={kaynak}
/>
))}
</Suspense>
);