refactor: güncellenmiş profil çerezi ile sonuç sayfası yönlendirmeleri
Some checks failed
Deploy / deploy (push) Has been cancelled

Profil çerezinin SSR'da kullanılmasını sağlayarak, sonuç sayfasındaki yönlendirmeleri güncelledik. Artık profil bilgileri URL parametreleri yerine çerezden alınarak işleniyor. Ayrıca, profil çerezi olmayan kullanıcılar için yönlendirme mantığı iyileştirildi. Çeşitli bileşenlerdeki URL oluşturma fonksiyonları güncellenerek, profil bilgileri çerezden okunacak şekilde düzenlendi. Bu değişiklikler, kullanıcı deneyimini artırmayı ve daha tutarlı bir veri akışı sağlamayı hedefliyor.
This commit is contained in:
bilalgursen
2026-08-09 03:31:42 +03:00
parent 3a8c049092
commit ce6871d623
26 changed files with 702 additions and 145 deletions

115
src/lib/harita-ulkeler.ts Normal file
View File

@@ -0,0 +1,115 @@
// Türkiye dışındaki (KKTC ve yurtdışı) üniversitelerin ülke haritası çözümü.
// Kontür verisi harita-ulkeler-verisi.ts'te (scripts/ulke-harita-uret.ts üretir).
import {
ULKE_HARITALARI,
type UlkeKodu,
type UlkeHarita,
} from "./harita-ulkeler-verisi";
export {
ULKE_HARITALARI,
ULKE_HARITA_GENISLIK,
ULKE_HARITA_YUKSEKLIK,
} from "./harita-ulkeler-verisi";
export type { UlkeKodu, UlkeHarita } from "./harita-ulkeler-verisi";
/** Schema.org addressCountry için ISO 3166-1 alpha-2 kodları. */
export const ULKE_ISO: Record<UlkeKodu, string> = {
kktc: "CY",
azerbaycan: "AZ",
kirgizistan: "KG",
kazakistan: "KZ",
"bosna-hersek": "BA",
makedonya: "MK",
arnavutluk: "AL",
};
type Sehir = { ulke: UlkeKodu; ad: string };
/** DB'deki il değerlerinden ve düzeltme tablosundan şehir anahtarları. */
const SEHIRLER: Record<string, Sehir> = {
GİRNE: { ulke: "kktc", ad: "Girne" },
LEFKOŞA: { ulke: "kktc", ad: "Lefkoşa" },
GAZİMAĞUSA: { ulke: "kktc", ad: "Gazimağusa" },
GÜZELYURT: { ulke: "kktc", ad: "Güzelyurt" },
LEFKE: { ulke: "kktc", ad: "Lefke" },
"BAKÜ-AZERBAYCAN": { ulke: "azerbaycan", ad: "Bakü" },
"BİŞKEK-KIRGIZİSTAN": { ulke: "kirgizistan", ad: "Bişkek" },
"TÜRKİSTAN-KAZAKİSTAN": { ulke: "kazakistan", ad: "Türkistan" },
"SARAYBOSNA - BOSNA - HERSEK": { ulke: "bosna-hersek", ad: "Saraybosna" },
ÜSKÜP: { ulke: "makedonya", ad: "Üsküp" },
TİRAN: { ulke: "arnavutluk", ad: "Tiran" },
};
/**
* Kaynak verideki gürültü için üniversite adına göre düzeltme:
* - Uluslararası Balkan Üniversitesi Üsküp'tedir; YÖK Atlas satırlarının
* çoğu il'i yanlışlıkla "SARAYBOSNA - BOSNA - HERSEK" der.
* - Tiran New York Üniversitesi'nin il alanı boştur.
* - ODTÜ ve ASBÜ'nün KKTC kampüs satırları vardır ama ana kampüs Türkiye'de;
* null → Türkiye haritasında kalır.
* Anahtar: uniAdiNormalize edilmiş adın tr-TR büyük harf hali.
*/
const UNI_DUZELTME: Record<string, keyof typeof SEHIRLER | null> = {
"ULUSLARARASI BALKAN ÜNİVERSİTESİ": "ÜSKÜP",
"TİRAN NEW YORK ÜNİVERSİTESİ": "TİRAN",
"KIBRIS AYDIN ÜNİVERSİTESİ": "GİRNE", // il alanı yalnızca "KIBRIS"
"ORTA DOĞU TEKNİK ÜNİVERSİTESİ": null,
"ANKARA SOSYAL BİLİMLER ÜNİVERSİTESİ": null,
};
/** il değeri Türkiye dışını mı gösteriyor? ("KIBRIS" genel değeri dahil) */
const YURTDISI_IL = new Set([...Object.keys(SEHIRLER), "KIBRIS"]);
export type UlkeKonum = {
ulke: UlkeKodu;
ulkeAd: string;
iso: string;
harita: UlkeHarita;
/** Şehir adı; genel "KIBRIS" gibi şehri bilinmeyen durumda null */
sehir: string | null;
};
function sehirdenKonum(anahtar: keyof typeof SEHIRLER): UlkeKonum {
const sehir = SEHIRLER[anahtar];
const harita = ULKE_HARITALARI[sehir.ulke];
return {
ulke: sehir.ulke,
ulkeAd: harita.ad,
iso: ULKE_ISO[sehir.ulke],
harita,
sehir: sehir.ad,
};
}
/**
* Üniversite Türkiye dışındaysa ülke haritası + şehir konumu döner;
* Türkiye'deyse (veya çözülemiyorsa) null — Türkiye haritası kullanılır.
*/
export function uniUlkeKonum(
universite: string,
il: string | null,
): UlkeKonum | null {
const ad = universite
.replace(/\s*\([^)]*\)\s*$/, "")
.trim()
.toLocaleUpperCase("tr-TR");
if (ad in UNI_DUZELTME) {
const anahtar = UNI_DUZELTME[ad];
return anahtar === null ? null : sehirdenKonum(anahtar);
}
if (!il || !YURTDISI_IL.has(il)) return null;
if (il in SEHIRLER) return sehirdenKonum(il as keyof typeof SEHIRLER);
// il "KIBRIS": ülke bilinir, şehir bilinmez — haritayı işaretsiz göster
const harita = ULKE_HARITALARI.kktc;
return {
ulke: "kktc",
ulkeAd: harita.ad,
iso: ULKE_ISO.kktc,
harita,
sehir: null,
};
}