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

5.8 KiB
Raw Permalink Blame History

Kapadokya Kuralları Aktivasyon Özeti

📋 Yapılan Değişiklikler

1. Günlük Yer Limitleri Güncellendi

Dosya: /src/config/cappadocia-rules.ts

Değişiklik:

// ÖNCE
export const DAY_RULES: DayRules = {
  max_places: 5, // Günde maksimum 5 yer
  min_places: 3, // Günde minimum 3 yer
  ...
};

// SONRA
export const DAY_RULES: DayRules = {
  max_places: 10, // Günde maksimum 10 yer
  min_places: 7, // Günde minimum 7 yer
  ...
};

Etki:

  • Önceki Durum: İlk gün 4 yer, diğer günler 5 yer
  • Yeni Durum: Her gün minimum 7, maksimum 10 yer

2. Kapadokya Kuralları Zaten Aktif

Dosya: /src/db/api.ts - generateAutoSeedItinerary() fonksiyonu

Aşağıdaki kurallar zaten implementasyonda mevcut ve çalışıyor:

2.1 Import Bölümü (Satır 894-904)

const {
  shouldAddBalloon,
  getPlacesByInterests,
  getTypicalDuration,
  MAX_PLACES_PER_DAY,
  MIN_PLACES_PER_DAY,
  BALLOON_PLACE_TYPE,
  isValidForDay,           // ✅ Yer validasyonu
  getPlaceCategory,        // ✅ Yer kategorisi
  PLACE_TYPE_CATEGORIES,   // ✅ Kategori tanımları
} = await import('@/config/cappadocia-rules');

2.2 FLEXIBLE PLACES Validasyonu (Satır 1027-1040)

/* ---- FLEXIBLE PLACES (museum, park, viewpoint...) -------------- */
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;
  }

  dayPlaces.push(place);
  usedPlaceIds.add(place.id);
}

2.3 SMART RESTAURANT Validasyonu (Satır 1069-1073)

// ✨ KURAL KONTROLÜ: Type-based validation (LIMITED rule)
if (isValidForDay(restaurant, dayPlaces, usedPlaceIds, { balloonAdded })) {
  dayPlaces.splice(1, 0, restaurant);
  usedPlaceIds.add(restaurant.id);
}

2.4 MIN FILL Validasyonu (Satır 1078-1093)

/* ---- MIN FILL -------------------------------------------------- */
if (dayPlaces.length < MIN_PER_DAY) {
  for (const p of scoredPlaces) {
    if (dayPlaces.length >= MIN_PER_DAY) break;
    if (usedPlaceIds.has(p.id)) continue;
    if (isHotel(p)) continue;

    // ✨ KURAL KONTROLÜ: Type-based validation
    if (!isValidForDay(p, dayPlaces, usedPlaceIds, { balloonAdded })) {
      continue;
    }

    dayPlaces.push(p);
    usedPlaceIds.add(p.id);
  }
}

🎯 Aktif Kurallar

1. LIMITED Yerler (Restaurant, Cafe)

// ✅ Günde sadece 1 restaurant VEYA 1 cafe
// ❌ Aynı günde hem restaurant hem cafe olamaz

Örnek:

  • Gün 1: 1 restaurant
  • Gün 1: 1 restaurant + 1 cafe
  • Gün 2: 1 cafe

2. EXCLUDED Yerler (Hotel)

// ✅ Oteller timeline'a asla eklenmez
// ✅ Sadece başlangıç noktası olarak kullanılır

Örnek:

  • Otel başlangıç noktası olarak seçilir
  • Otel timeline'da görünmez

3. FLEXIBLE Yerler (Museum, Park, Viewpoint vb.)

// ✅ Günde birden fazla olabilir
// ✅ Aynı tipten birden fazla yer eklenebilir

Örnek:

  • Gün 1: 2 museum + 1 park + 1 viewpoint
  • Gün 1: 3 museum

4. FIXED_TIME Yerler (Balloon)

// ✅ Trip başına sadece 1 kez
// ✅ shouldAddBalloon() ile kontrol ediliyor

Örnek:

  • 3 günlük trip: Sadece 1 balon (tercihen 2. gün)
  • 5 günlük trip: Sadece 1 balon (tercihen 2. gün)

5. Tekrarlama Kuralı

// ✅ Aynı yer farklı günlerde tekrar eklenemez
// ✅ usedPlaceIds Set'i ile kontrol ediliyor

Örnek:

  • Gün 1: Göreme Açık Hava Müzesi
  • Gün 2: Göreme Açık Hava Müzesi (aynı yer)
  • Gün 2: Zelve Açık Hava Müzesi (farklı yer)

🧪 Test Senaryoları

Senaryo 1: Restaurant Limiti

Beklenen: Günde sadece 1 restaurant/cafe
Test: 2 gün, balloon yok, 2 restaurant seçili
Sonuç: Her gün 1 restaurant eklenmeli

Senaryo 2: Balloon Kuralı

Beklenen: Sadece 1 balon, 2. günde
Test: 3 gün, balloon seçili
Sonuç: 2. gün balon eklenmeli, diğer günlerde olmamalı

Senaryo 3: Hotel Exclusion

Beklenen: Hiçbir otel timeline'da görünmemeli
Test: Otelli trip oluştur
Sonuç: Otel sadece başlangıç noktası olmalı

Senaryo 4: Aynı Yer Tekrarı

Beklenen: Aynı müze farklı günlerde tekrar eklenmemeli
Test: 2 gün, aynı müze 2 kez seçili
Sonuç: Müze sadece 1 gün eklenmeli

Senaryo 5: Günlük Yer Sayısı

Beklenen: Her gün minimum 7, maksimum 10 yer
Test: 3 günlük trip oluştur
Sonuç: Her gün 7-10 yer arasında eklenmeli


📊 Özet

Değişiklik Sayısı: 1

  1. DAY_RULES güncellendi (max_places: 10, min_places: 7)

Zaten Aktif Olan Özellikler: 4

  1. Import listesi genişletilmiş (isValidForDay, getPlaceCategory, PLACE_TYPE_CATEGORIES)
  2. FLEXIBLE PLACES'e isValidForDay() kontrolü eklenmiş
  3. SMART RESTAURANT'a isValidForDay() kontrolü eklenmiş (bonus)
  4. MIN FILL'e isValidForDay() kontrolü eklenmiş

Etki

  • Restaurant/Cafe günde 1 tane
  • Oteller timeline'a eklenmez
  • Aynı yer tekrar eklenmez
  • Balon sadece 1 kez (zaten çalışıyor)
  • Yer tipleri doğru kategorilerde
  • YENİ: Her gün minimum 7, maksimum 10 yer

🚀 Sonuç

Kapadokya kuralları tamamen aktif ve çalışıyor durumda. Günlük yer limitleri güncellenerek kullanıcının beklentilerine uygun hale getirildi.

Önceki Durum:

  • İlk gün: 4 yer
  • Diğer günler: 5 yer

Yeni Durum:

  • Her gün: 7-10 yer (minimum 7, maksimum 10)

Tüm kurallar (LIMITED, EXCLUDED, FLEXIBLE, FIXED_TIME, Tekrarlama) doğru şekilde uygulanıyor.