168 lines
3.9 KiB
Markdown
168 lines
3.9 KiB
Markdown
# 🚀 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<string>,
|
||
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
|