13 KiB
13 KiB
π§ Kapadokya KurallarΔ± - Kritik DΓΌzeltme (GΓΆrsel)
π― Sorun: SMART RESTAURANT Bypass
β ΓNCE (HatalΔ± AkΔ±Ε)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GΓN 1 - HATA SENARYOSU β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1οΈβ£ FLEXIBLE PLACES
βββββββββββββββββββββββββββββββββββββββββββββββ
β GΓΆreme AΓ§Δ±k Hava MΓΌzesi (museum) β
β β
isValidForDay() β FLEXIBLE β Δ°ZΔ°N β
βββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββ
β Cafe Safak (cafe) β
β β
isValidForDay() β LIMITED β Δ°ZΔ°N β
β (gΓΌnde henΓΌz LIMITED yok) β
βββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββ
β PaΕabaΔ Vadisi (valley) β
β β
isValidForDay() β FLEXIBLE β Δ°ZΔ°N β
βββββββββββββββββββββββββββββββββββββββββββββββ
dayPlaces = [GΓΆreme, Cafe Safak, PaΕabaΔ]
2οΈβ£ SMART RESTAURANT
hasRestaurant = dayPlaces.some(isRestaurant)
= dayPlaces.some(p => p.type === 'restaurant' || p.type === 'cafe')
= true (Cafe Safak var)
β SORUN: hasRestaurant kontrolΓΌ yanlΔ±Ε!
- Cafe var ama hasRestaurant = false olarak hesaplanΔ±yor
- ΓΓΌnkΓΌ isRestaurant fonksiyonu cafe'yi de kontrol ediyor
- AMA eΔer cafe FLEXIBLE PLACES'te eklenmiΕse...
β ASIL SORUN: isValidForDay() kontrolΓΌ YOK!
βββββββββββββββββββββββββββββββββββββββββββββββ
β Seten Restaurant (restaurant) β
β β DOΔRUDAN EKLENDΔ° (kural kontrolΓΌ yok!) β
β β LIMITED kuralΔ± bypass edildi! β
βββββββββββββββββββββββββββββββββββββββββββββββ
dayPlaces = [GΓΆreme, Seten Restaurant, Cafe Safak, PaΕabaΔ]
β Ortaya eklendi (splice)
β SONUΓ: AynΔ± gΓΌnde hem cafe hem restaurant var!
β SONRA (DΓΌzeltilmiΕ AkΔ±Ε)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GΓN 1 - DOΔRU SENARYO β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1οΈβ£ FLEXIBLE PLACES
βββββββββββββββββββββββββββββββββββββββββββββββ
β GΓΆreme AΓ§Δ±k Hava MΓΌzesi (museum) β
β β
isValidForDay() β FLEXIBLE β Δ°ZΔ°N β
βββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββ
β Cafe Safak (cafe) β
β β
isValidForDay() β LIMITED β Δ°ZΔ°N β
β (gΓΌnde henΓΌz LIMITED yok) β
βββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββ
β PaΕabaΔ Vadisi (valley) β
β β
isValidForDay() β FLEXIBLE β Δ°ZΔ°N β
βββββββββββββββββββββββββββββββββββββββββββββββ
dayPlaces = [GΓΆreme, Cafe Safak, PaΕabaΔ]
2οΈβ£ SMART RESTAURANT
hasRestaurant = dayPlaces.some(isRestaurant)
= true (Cafe Safak var)
β
hasRestaurant = true β SMART RESTAURANT atlandΔ±
VEYA (eΔer cafe yoksa):
hasRestaurant = false
βββββββββββββββββββββββββββββββββββββββββββββββ
β Seten Restaurant (restaurant) β
β β
isValidForDay() kontrolΓΌ: β
β - dayPlaces'te LIMITED var mΔ±? β
β - EVET (Cafe Safak) β
β - return false β
β β REDDEDΔ°LDΔ° (LIMITED kuralΔ±) β
βββββββββββββββββββββββββββββββββββββββββββββββ
dayPlaces = [GΓΆreme, Cafe Safak, PaΕabaΔ]
(deΔiΕmedi)
β
SONUΓ: GΓΌnde sadece 1 LIMITED tip (cafe)
π Kod KarΕΔ±laΕtΔ±rmasΔ±
β ΓNCE (SatΔ±r 1066-1069)
if (restaurants.length > 0) {
dayPlaces.splice(1, 0, restaurants[0]); // β DoΔrudan ekleniyor
usedPlaceIds.add(restaurants[0].id); // β Kural kontrolΓΌ yok
}
Sorun:
- Restaurant doΔrudan ekleniyor
isValidForDay()kontrolΓΌ yok- LIMITED kuralΔ± bypass ediliyor
β SONRA (SatΔ±r 1066-1073)
if (restaurants.length > 0) {
const restaurant = restaurants[0];
// β¨ KURAL KONTROLΓ: Type-based validation (LIMITED rule)
if (isValidForDay(restaurant, dayPlaces, usedPlaceIds, { balloonAdded })) {
dayPlaces.splice(1, 0, restaurant); // β
Kural kontrolΓΌnden sonra
usedPlaceIds.add(restaurant.id); // β
Sadece geΓ§erliyse ekle
}
}
DΓΌzeltme:
- Restaurant ΓΆnce deΔiΕkene atanΔ±yor
isValidForDay()ile kontrol ediliyor- Sadece geΓ§erliyse ekleniyor
π isValidForDay() DetaylΔ± AkΔ±Ε
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β isValidForDay(restaurant, dayPlaces, ...) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββ
β 1οΈβ£ TEKRARLAMA KONTROLΓβ
β usedPlaceIds.has(id)? β
βββββββββββββββββββββββββ
β β
β HAYIR β EVET
βΌ βΌ
ββββββββ ββββββββ
β Devamβ β β β
ββββββββ βREDDETβ
β ββββββββ
βΌ
βββββββββββββββββββββββββ
β 2οΈβ£ KATEGORΔ° BELΔ°RLE β
β getPlaceCategory β
β ('restaurant') β
β β 'LIMITED' β
βββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββ
β 3οΈβ£ LIMITED KONTROLΓ β
β dayPlaces'te LIMITED β
β var mΔ±? β
βββββββββββββββββββββββββ
β β
β HAYIR β EVET
βΌ βΌ
ββββββββ ββββββββ
β β
β β β β
βΔ°ZΔ°N β βREDDETβ
ββββββββ ββββββββ
π― GerΓ§ek DΓΌnya ΓrneΔi
Senaryo: 2 GΓΌnlΓΌk Kapadokya Turu
β ΓNCE (HatalΔ±)
GΓN 1:
09:00 - GΓΆreme AΓ§Δ±k Hava MΓΌzesi (museum)
12:00 - Cafe Safak (cafe) β FLEXIBLE PLACES'ten
13:00 - Seten Restaurant (restaurant) β SMART RESTAURANT'tan (HATA!)
15:00 - PaΕabaΔ Vadisi (valley)
β SORUN: AynΔ± gΓΌnde hem cafe hem restaurant!
β LIMITED kuralΔ± ihlal edildi!
GΓN 2:
09:00 - Zelve AΓ§Δ±k Hava MΓΌzesi (museum)
12:00 - Dibek Restaurant (restaurant) β SMART RESTAURANT'tan
15:00 - Devrent Vadisi (valley)
β SONRA (DoΔru)
GΓN 1:
09:00 - GΓΆreme AΓ§Δ±k Hava MΓΌzesi (museum)
12:00 - Cafe Safak (cafe) β FLEXIBLE PLACES'ten
15:00 - PaΕabaΔ Vadisi (valley)
17:00 - UΓ§hisar Kalesi (viewpoint)
β
DOΔRU: GΓΌnde sadece 1 LIMITED tip (cafe)
β
Restaurant reddedildi (LIMITED kuralΔ±)
GΓN 2:
09:00 - Zelve AΓ§Δ±k Hava MΓΌzesi (museum)
12:00 - Dibek Restaurant (restaurant) β SMART RESTAURANT'tan
15:00 - Devrent Vadisi (valley)
17:00 - Avanos Seramik (workshop)
β
DOΔRU: GΓΌnde sadece 1 LIMITED tip (restaurant)
π Etki Analizi
Γnce (HatalΔ±)
| GΓΌn | Cafe | Restaurant | LIMITED SayΔ±sΔ± | Durum |
|---|---|---|---|---|
| 1 | β | β | 2 | β HATA |
| 2 | β | β | 1 | β DoΔru |
Sorun: GΓΌn 1'de LIMITED kuralΔ± ihlal ediliyor
Sonra (DoΔru)
| GΓΌn | Cafe | Restaurant | LIMITED SayΔ±sΔ± | Durum |
|---|---|---|---|---|
| 1 | β | β | 1 | β DoΔru |
| 2 | β | β | 1 | β DoΔru |
SonuΓ§: Her gΓΌnde LIMITED kuralΔ± uygulanΔ±yor
π§ͺ Test Matrisi
| Test | FLEXIBLE PLACES | SMART RESTAURANT | SonuΓ§ |
|---|---|---|---|
| Cafe eklendi | β Cafe | β Restaurant reddedildi | β DoΔru |
| Restaurant eklendi | β Restaurant | β AtlandΔ± (hasRestaurant=true) | β DoΔru |
| HiΓ§biri eklenmedi | β | β Restaurant eklendi | β DoΔru |
| Δ°kisi de aday | β Cafe (ΓΆnce geldi) | β Restaurant reddedildi | β DoΔru |
π Kritik Noktalar
1. hasRestaurant KontrolΓΌ Yeterli DeΔil
const hasRestaurant = dayPlaces.some(isRestaurant);
Sorun:
- Sadece restaurant/cafe var mΔ± kontrol eder
- LIMITED kategorisini kontrol etmez
- Gelecekte yeni LIMITED tipler eklenirse Γ§alΔ±Εmaz
ΓΓΆzΓΌm:
isValidForDay()kategori bazlΔ± kontrol yapar- TΓΌm LIMITED tipleri kapsar
- GeniΕletilebilir yapΔ±
2. TΓΌm Ekleme NoktalarΔ±nda Kontrol Gerekli
β
BALLOON β shouldAddBalloon()
β
FLEXIBLE β isValidForDay()
β
SMART REST β isValidForDay() (YENΔ°!)
β
MIN FILL β isValidForDay()
Γnemli:
- Bir yer timeline'a eklendiΔi HER noktada kontrol gerekli
- HiΓ§bir bypass noktasΔ± bΔ±rakΔ±lmamalΔ±
- TutarlΔ± kural uygulamasΔ± Εart
3. Kod DeΔiΕikliΔi Minimal
if (restaurants.length > 0) {
+ const restaurant = restaurants[0];
+
+ // β¨ KURAL KONTROLΓ
+ if (isValidForDay(restaurant, dayPlaces, usedPlaceIds, { balloonAdded })) {
- dayPlaces.splice(1, 0, restaurants[0]);
- usedPlaceIds.add(restaurants[0].id);
+ dayPlaces.splice(1, 0, restaurant);
+ usedPlaceIds.add(restaurant.id);
+ }
}
Avantajlar:
- Minimal deΔiΕiklik (5 satΔ±r)
- Mevcut yapΔ±ya uyumlu
- Test edilmiΕ fonksiyon kullanΔ±mΔ±
β DoΔrulama
TΓΌm Ekleme NoktalarΔ±
$ grep -n "dayPlaces.push\|dayPlaces.splice" src/db/api.ts
1021: dayPlaces.push(balloon); # β
shouldAddBalloon()
1038: dayPlaces.push(place); # β
isValidForDay()
1071: dayPlaces.splice(1, 0, restaurant);# β
isValidForDay() (YENΔ°!)
1090: dayPlaces.push(p); # β
isValidForDay()
TΓΌm Kural Kontrolleri
$ grep -n "isValidForDay\|shouldAddBalloon" src/db/api.ts
1006: shouldAddBalloon(...) # β
BALLOON
1034: isValidForDay(place, ...) # β
FLEXIBLE PLACES
1070: isValidForDay(restaurant, ...) # β
SMART RESTAURANT (YENΔ°!)
1086: isValidForDay(p, ...) # β
MIN FILL
β SonuΓ§: TΓΌm ekleme noktalarΔ±nda kural kontrolΓΌ var!
Tarih: 2025
Durum: β
DΓΌzeltildi
DeΔiΕiklik: 1 dosya, 5 satΔ±r
Etki: Kritik - LIMITED kuralΔ± artΔ±k tam olarak Γ§alΔ±ΕΔ±yor