fix: denetim bulguları — çip adı sahte 'tercihlerin değişmiş', çekmece kartı, senkron riski

- tercihFarki eski 'İş garantisi' parametresini yeni ada eşleyerek kıyaslar;
  ad değişikliği 3 kredilik güncelleme çağrısı üretmesin
- çekmece kartı yalnız profil yokken sıra ister, butonu sıra kapısını açar
  (profilsiz ziyaretçi /listem giriş duvarına gönderilmiyordu → çıkmaz)
- sunucuylaBirlestir risksiz gelen kayıtların riskini doldurur
- /paket'teki fiyat kıyasına kaynak satırı

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-21 16:06:15 +03:00
parent 0400aa5d77
commit f7ed8f2f0b
5 changed files with 54 additions and 15 deletions

View File

@@ -111,7 +111,7 @@ export function sihirbazDogrula(girdi: unknown): SihirbazSecimleri | null {
p.oncelikler
// Eski kayıtlı profiller: çip adı "İş garantisi" idi (vaat diliyle
// çeliştiği için değişti); seçim kaybolmasın diye yeni ada eşlenir.
.map((x) => (x === "İş garantisi" ? "İş bulma kolaylığı" : x))
.map(oncelikNormalize)
.filter(
(x): x is string =>
typeof x === "string" &&
@@ -124,6 +124,15 @@ export function sihirbazDogrula(girdi: unknown): SihirbazSecimleri | null {
return { kategoriler, iller, universiteTipi, oncelikler };
}
/**
* Eski çip adı "İş garantisi" → "İş bulma kolaylığı". Kayıtlı profil ve eski
* rapor parametreleri eski adı taşıyabilir; karşılaştırma/gösterim öncesi
* yeni ada eşlenir ki ad değişikliği "tercihlerin değişmiş" diye okunmasın.
*/
export function oncelikNormalize<T>(x: T): T | string {
return x === "İş garantisi" ? "İş bulma kolaylığı" : x;
}
/** localStorage'taki ortak sıra + sihirbaz profilini güvenle doğrular. */
export function tercihProfiliDogrula(girdi: unknown): TercihProfili | null {
if (typeof girdi !== "object" || girdi === null) return null;