38980-vm/app-9w9pd00g5j41/CAPPADOCIA_RULES_BEFORE_AFTER.md
2026-03-04 18:25:09 +00:00

7.4 KiB
Raw Permalink Blame History

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

  • balloonAdded gibi trip-level state
  • dayPlaces ile gün-level state
  • usedPlaceIds ile trip-level tekrarlama kontrolü

🚀 Sonuç

Aktive Edilen Kurallar

  1. LIMITED - Restaurant/Cafe limiti
  2. EXCLUDED - Hotel hariç tutma
  3. FLEXIBLE - Müze/Park esnekliği (zaten çalışıyordu)
  4. FIXED_TIME - Balon kuralı (zaten çalışıyordu)
  5. 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