# 🚀 Kapadokya Kuralları - Hızlı Referans ## 📌 Kural Kategorileri ### 🟢 FLEXIBLE (Esnek) ``` museum, park, viewpoint, valley, historical_site, church, cave, underground_city ``` - ✅ Günde birden fazla - ✅ Aynı tipten birden fazla ### 🟡 LIMITED (Sınırlı) ``` restaurant, cafe ``` - ✅ Günde sadece 1 - ❌ Restaurant VEYA cafe ### 🔴 EXCLUDED (Hariç) ``` hotel, accommodation, lodging ``` - ❌ Asla timeline'a eklenmez - ✅ Sadece başlangıç noktası ### 🔵 FIXED_TIME (Sabit Saatli) ``` hot_air_balloon, hot-air-balloon ``` - ✅ Trip başına 1 kez - ✅ Tercihen 2. gün ## 🎯 Kullanım Örnekleri ### ✅ Doğru Kullanım ```typescript // GÜN 1 ✅ Göreme Açık Hava Müzesi (museum) ✅ Zelve Açık Hava Müzesi (museum) // FLEXIBLE: Birden fazla müze ✅ Seten Restaurant (restaurant) // LIMITED: 1 tane ✅ Uçhisar Kalesi (viewpoint) // GÜN 2 ✅ Balon Turu (hot_air_balloon) // FIXED_TIME: Trip başına 1 ✅ Paşabağ Vadisi (valley) ✅ Dibek Restaurant (restaurant) // LIMITED: Farklı gün, farklı restaurant ``` ### ❌ Yanlış Kullanım ```typescript // GÜN 1 ✅ Göreme Açık Hava Müzesi (museum) ❌ Sultan Cave Suites (hotel) // EXCLUDED: Asla eklenmez ✅ Seten Restaurant (restaurant) ❌ Cafe Safak (cafe) // LIMITED: Günde zaten restaurant var // GÜN 2 ✅ Balon Turu (hot_air_balloon) ❌ Göreme Açık Hava Müzesi (museum) // Tekrarlama: Aynı yer 2. kez ❌ 2. Balon Turu (hot_air_balloon) // FIXED_TIME: Trip başına 1 kez ``` ## 🔍 Kontrol Fonksiyonu ### isValidForDay() ```typescript isValidForDay( place: PlaceWithCoordinates, dayPlaces: DayPlace[], usedPlaceIds: Set, rulesContext?: { balloonAdded?: boolean } ): boolean ``` **Kontrol Sırası:** 1. ✅ Aynı yer tekrar mı? → Reddet 2. ✅ EXCLUDED kategorisi mi? → Reddet 3. ✅ FIXED_TIME ve zaten eklendi mi? → Reddet 4. ✅ LIMITED ve günde zaten var mı? → Reddet 5. ✅ FLEXIBLE → İzin ver 6. ✅ UNKNOWN → İzin ver ## 📊 Kural Matrisi | Kategori | Günde Kaç Tane | Aynı Tip | Tekrar | Örnek | |----------|----------------|----------|--------|-------| | FLEXIBLE | Birden fazla | ✅ | ❌ | museum, park | | LIMITED | 1 | ❌ | ❌ | restaurant, cafe | | EXCLUDED | 0 | ❌ | ❌ | hotel | | FIXED_TIME | Trip'te 1 | ❌ | ❌ | balloon | ## 🛠️ Kod Konumları ### Kural Tanımları ``` /src/config/cappadocia-rules.ts ``` - `PLACE_TYPE_CATEGORIES` (Satır 174-186) - `getPlaceCategory()` (Satır 191-197) - `isValidForDay()` (Satır 273-314) ### Kural Uygulaması ``` /src/db/api.ts ``` - Import (Satır 894-904) - FLEXIBLE PLACES (Satır 1027-1040) - MIN FILL (Satır 1073-1088) ## 🧪 Test Komutları ### TypeScript Kontrolü ```bash cd /workspace/app-9jd6q07lo4xs npm run lint ``` ### Kural Kontrolü ```bash # Import kontrolü grep "isValidForDay" src/db/api.ts # Kullanım kontrolü grep -A 5 "isValidForDay(place\|isValidForDay(p" src/db/api.ts ``` ## 📈 Performans ### Zaman Karmaşıklığı - `isValidForDay()`: O(n) - n = günlük yer sayısı (max 5) - `getPlaceCategory()`: O(1) - Sabit zaman ### Alan Karmaşıklığı - `usedPlaceIds`: O(m) - m = toplam yer sayısı (max 15) ## 🎓 Önemli Notlar 1. **Geriye Uyumluluk** - Mevcut seyahatler etkilenmez - Sadece yeni AUTO_SEED seyahatler 2. **Öncelik Sırası** - Balon → Restaurant → Flexible → Min Fill 3. **Hata Durumları** - Kural ihlali → Yer atlanır - Minimum yer sayısı → Kural esnetilmez 4. **Genişletilebilirlik** - Yeni kategori eklemek kolay - `PLACE_TYPE_CATEGORIES` güncelle - `isValidForDay()` otomatik çalışır ## 🔗 İlgili Dosyalar - ✅ `CAPPADOCIA_RULES_ACTIVATION.md` - Detaylı kılavuz - ✅ `CAPPADOCIA_RULES_BEFORE_AFTER.md` - Önce/Sonra - ✅ `CAPPADOCIA_RULES_SUMMARY.md` - Özet - ✅ `test-cappadocia-rules.ts` - Test senaryoları --- **Versiyon:** 1.0 **Tarih:** 2025 **Durum:** ✅ Aktif