7.4 KiB
7.4 KiB
Kapadokya Kuralları: Önce vs Sonra
📊 Davranış Karşılaştırması
Senaryo 1: Restaurant/Cafe Ekleme
❌ ÖNCE (Kurallar Pasif)
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Seten Restaurant (restaurant)
✅ Cafe Safak (cafe) ← SORUN: Aynı günde hem restaurant hem cafe
✅ Uçhisar Kalesi (viewpoint)
✅ SONRA (Kurallar Aktif)
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Seten Restaurant (restaurant)
❌ Cafe Safak (cafe) ← REDDEDİLDİ: LIMITED kuralı (günde 1 tane)
✅ Uçhisar Kalesi (viewpoint)
Sonuç: Günde sadece 1 restaurant VEYA 1 cafe eklenir.
Senaryo 2: Hotel Ekleme
❌ ÖNCE (Kurallar Pasif)
GÜN 1:
✅ Sultan Cave Suites (hotel) ← SORUN: Hotel timeline'da görünüyor
✅ Göreme Açık Hava Müzesi (museum)
✅ Seten Restaurant (restaurant)
✅ SONRA (Kurallar Aktif)
GÜN 1:
❌ Sultan Cave Suites (hotel) ← REDDEDİLDİ: EXCLUDED kuralı
✅ Göreme Açık Hava Müzesi (museum)
✅ Seten Restaurant (restaurant)
BAŞLANGIÇ NOKTASI:
📍 Sultan Cave Suites (hotel) ← Sadece başlangıç noktası olarak kullanılır
Sonuç: Oteller asla timeline'a eklenmez, sadece başlangıç noktası olarak kullanılır.
Senaryo 3: Aynı Yer Tekrarı
❌ ÖNCE (Kurallar Pasif)
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Seten Restaurant (restaurant)
GÜN 2:
✅ Göreme Açık Hava Müzesi (museum) ← SORUN: Aynı müze tekrar eklendi
✅ Dibek Restaurant (restaurant)
✅ SONRA (Kurallar Aktif)
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Seten Restaurant (restaurant)
GÜN 2:
❌ Göreme Açık Hava Müzesi (museum) ← REDDEDİLDİ: Tekrarlama kuralı
✅ Zelve Açık Hava Müzesi (museum) ← Farklı müze eklendi
✅ Dibek Restaurant (restaurant)
Sonuç: Aynı yer farklı günlerde tekrar eklenemez.
Senaryo 4: Flexible Yerler (Müze/Park)
✅ ÖNCE (Kurallar Pasif)
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Zelve Açık Hava Müzesi (museum)
✅ Paşabağ Vadisi (valley)
✅ Uçhisar Kalesi (viewpoint)
✅ SONRA (Kurallar Aktif)
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Zelve Açık Hava Müzesi (museum) ← FLEXIBLE: Aynı tipten birden fazla olabilir
✅ Paşabağ Vadisi (valley)
✅ Uçhisar Kalesi (viewpoint)
Sonuç: FLEXIBLE yerler için davranış değişmedi (zaten doğru çalışıyordu).
Senaryo 5: Balon Ekleme
✅ ÖNCE (Kurallar Pasif)
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Seten Restaurant (restaurant)
GÜN 2:
✅ Balon Turu (hot_air_balloon) ← Zaten doğru çalışıyordu
✅ Zelve Açık Hava Müzesi (museum)
✅ SONRA (Kurallar Aktif)
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Seten Restaurant (restaurant)
GÜN 2:
✅ Balon Turu (hot_air_balloon) ← FIXED_TIME: Trip başına 1 kez
✅ Zelve Açık Hava Müzesi (museum)
Sonuç: Balon kuralı için davranış değişmedi (zaten doğru çalışıyordu).
🎯 Kural Kategorileri
FLEXIBLE (Esnek)
['museum', 'park', 'viewpoint', 'valley', 'historical_site', 'church', 'cave', 'underground_city']
Davranış:
- ✅ Günde birden fazla olabilir
- ✅ Aynı tipten birden fazla yer eklenebilir
- ✅ Maksimum yer sayısına kadar serbest
Örnek:
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
✅ Zelve Açık Hava Müzesi (museum) ← 2. müze
✅ Derinkuyu Yeraltı Şehri (underground_city)
✅ Uçhisar Kalesi (viewpoint)
LIMITED (Sınırlı)
['restaurant', 'cafe']
Davranış:
- ✅ Günde sadece 1 tane
- ❌ Restaurant VEYA cafe (ikisi birden olamaz)
- ✅ Farklı günlerde farklı restaurant/cafe olabilir
Örnek:
GÜN 1:
✅ Seten Restaurant (restaurant)
❌ Cafe Safak (cafe) ← REDDEDİLDİ
GÜN 2:
✅ Dibek Restaurant (restaurant) ← Farklı gün, farklı restaurant
EXCLUDED (Hariç)
['hotel', 'accommodation', 'lodging']
Davranış:
- ❌ Asla timeline'a eklenmez
- ✅ Sadece başlangıç noktası olarak kullanılır
- ✅ Trip metadata'sında saklanır
Örnek:
TIMELINE:
❌ Sultan Cave Suites (hotel) ← Asla eklenmez
BAŞLANGIÇ NOKTASI:
📍 Sultan Cave Suites (hotel) ← Sadece burada kullanılır
FIXED_TIME (Sabit Saatli)
['hot_air_balloon', 'hot-air-balloon']
Davranış:
- ✅ Trip başına 1 kez
- ✅ Tercihen 2. günde (1 günlük seyahatte 1. gün)
- ✅ Sadece sunrise zaman bloğunda
- ❌ 2. balon eklenemez
Örnek:
GÜN 1:
✅ Göreme Açık Hava Müzesi (museum)
GÜN 2:
✅ Balon Turu (hot_air_balloon) ← Trip başına 1 kez
✅ Zelve Açık Hava Müzesi (museum)
GÜN 3:
❌ 2. Balon Turu ← REDDEDİLDİ
✅ Paşabağ Vadisi (valley)
📈 İstatistikler
Önce (Kurallar Pasif)
- ❌ Günde 2-3 restaurant/cafe eklenebiliyordu
- ❌ Oteller timeline'a eklenebiliyordu
- ❌ Aynı yer farklı günlerde tekrar eklenebiliyordu
- ✅ Balon kuralı çalışıyordu
- ✅ Flexible yerler çalışıyordu
Sonra (Kurallar Aktif)
- ✅ Günde sadece 1 restaurant/cafe
- ✅ Oteller timeline'a eklenmez
- ✅ Aynı yer tekrar eklenemez
- ✅ Balon kuralı çalışıyor
- ✅ Flexible yerler çalışıyor
🔍 Kod Karşılaştırması
FLEXIBLE PLACES Bölümü
❌ ÖNCE
for (const place of scoredPlaces) {
if (dayPlaces.length >= MAX_PER_DAY) break;
if (usedPlaceIds.has(place.id)) continue;
if (isHotel(place)) continue;
if (isRestaurant(place)) continue; // ← Manuel kontrol
dayPlaces.push(place);
usedPlaceIds.add(place.id);
}
✅ SONRA
for (const place of scoredPlaces) {
if (dayPlaces.length >= MAX_PER_DAY) break;
if (usedPlaceIds.has(place.id)) continue;
if (isHotel(place)) continue;
// ✨ KURAL KONTROLÜ: Type-based validation
if (!isValidForDay(place, dayPlaces, usedPlaceIds, { balloonAdded })) {
continue; // ← Otomatik kural kontrolü
}
dayPlaces.push(place);
usedPlaceIds.add(place.id);
}
🎓 Öğrenilen Dersler
1. Type-Based Rules
- ✅ Her yer tipi için ayrı kurallar
- ✅ Kategori bazlı davranış
- ✅ Esnek ve genişletilebilir yapı
2. Validation Function
- ✅ Tek bir fonksiyon (
isValidForDay) - ✅ Tüm kuralları kontrol eder
- ✅ Kolay test edilebilir
3. Context Passing
- ✅
balloonAddedgibi trip-level state - ✅
dayPlacesile gün-level state - ✅
usedPlaceIdsile trip-level tekrarlama kontrolü
🚀 Sonuç
Aktive Edilen Kurallar
- ✅ LIMITED - Restaurant/Cafe limiti
- ✅ EXCLUDED - Hotel hariç tutma
- ✅ FLEXIBLE - Müze/Park esnekliği (zaten çalışıyordu)
- ✅ FIXED_TIME - Balon kuralı (zaten çalışıyordu)
- ✅ Tekrarlama - Aynı yer tekrarı önleme (zaten çalışıyordu)
Değişiklik Sayısı
- Dosya: 1 (
/src/db/api.ts) - Satır: 4 değişiklik
- Import: 3 yeni fonksiyon/sabit
- Validation: 2 yeni kontrol noktası
Test Durumu
- ✅ TypeScript tip kontrolü geçti
- ✅ Lint hataları yok (sadece önceden var olanlar)
- ⏳ Kullanıcı testleri bekleniyor
Tarih: 2025
Durum: ✅ Tamamlandı
Versiyon: 1.0