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

3.8 KiB
Raw Permalink Blame History

Places Form Düzeltmeleri

Yapılan Değişiklikler

🔴 1. Tür (Type) Alanı - Serbest Metin → Select Dropdown

Problem:

  • Kullanıcılar serbest metin girebiliyordu
  • Explore filtreleri bozuluyordu
  • TripPlanner banner & trigger logic çalışmıyordu
  • AI / öneri sistemi tutarsız veri alıyordu

Çözüm:

  • Input alanı kaldırıldı
  • Select dropdown eklendi
  • Sabit tür listesi tanımlandı: PLACE_TYPES
    • museum
    • historical
    • viewpoint
    • restaurant
    • activity
    • hot-air-balloon
    • atv
    • horse-riding
    • tour
    • hotel
  • Zorunlu alan validasyonu eklendi

🔴 2. Latitude / Longitude Koordinatları - Zorunlu Alan

Problem:

  • 0 değeri girilebiliyordu (geçersiz koordinat)
  • Boş geçilebiliyordu
  • Harita özellikleri kırılıyordu

Çözüm:

  • required validasyonu eklendi
  • 0 değeri engellendi
  • Koordinat aralık kontrolü eklendi:
    • Latitude: -90 ile 90 arası
    • Longitude: -180 ile 180 arası
  • Placeholder örnekler eklendi (İstanbul koordinatları)
  • Zorunlu alan işareti (*) eklendi

🔴 3. Duration (Süre) Alanı - Eksik Alan Eklendi

Problem:

  • Duration alanı hiç yoktu
  • TripPlanner'da süre default hardcoded kalıyordu
  • Explore → TripPlanner eklemede mantık kopuktu

Çözüm:

  • Database'e duration kolonu eklendi
  • Form'a duration alanı eklendi
  • Zorunlu alan validasyonu eklendi
  • Placeholder örnek eklendi: "Örn: 2 saat"
  • Interface'lere duration field eklendi

Teknik Detaylar

Değişen Dosyalar

  • /src/pages/admin/Places.tsx
  • Database: places tablosu

Database Migration

ALTER TABLE places ADD COLUMN IF NOT EXISTS duration text;

Eklenen Import'lar

import {
  Select,
  SelectContent,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from '@/components/ui/select';

Yeni Sabitler

const PLACE_TYPES = [
  'museum',
  'historical',
  'viewpoint',
  'restaurant',
  'activity',
  'hot-air-balloon',
  'atv',
  'horse-riding',
  'tour',
  'hotel',
] as const;

Güncellenmiş Interface'ler

Place Interface:

interface Place {
  // ... diğer alanlar
  duration: string | null;
}

PlaceFormValues Interface:

interface PlaceFormValues {
  // ... diğer alanlar
  duration: string;
}

Form Validasyonları

Type Field:

rules={{ required: 'Tür seçimi zorunludur' }}

Duration Field:

rules={{ required: 'Süre zorunludur' }}

Latitude Field:

rules={{ 
  required: 'Enlem zorunludur',
  validate: (v) => {
    if (v === 0) return 'Geçerli bir enlem koordinatı girin';
    if (v < -90 || v > 90) return 'Enlem -90 ile 90 arasında olmalıdır';
    return true;
  }
}}

Longitude Field:

rules={{ 
  required: 'Boylam zorunludur',
  validate: (v) => {
    if (v === 0) return 'Geçerli bir boylam koordinatı girin';
    if (v < -180 || v > 180) return 'Boylam -180 ile 180 arasında olmalıdır';
    return true;
  }
}}

Test Edilmesi Gerekenler

  1. Yeni yer eklerken tür seçimi zorunlu mu?
  2. Tür dropdown'ında sadece belirlenen türler var mı?
  3. Latitude/Longitude boş bırakılamıyor mu?
  4. 0,0 koordinatı engellenmiş mi?
  5. Geçersiz koordinat aralıkları reddediliyor mu?
  6. Duration alanı zorunlu mu?
  7. Duration alanı database'e kaydediliyor mu?
  8. Mevcut yer düzenlenirken veriler doğru yükleniyor mu?

Etkilenen Sistemler

Bu düzeltmeler sayesinde şu sistemler düzgün çalışacak:

  • Explore sayfası filtreleri
  • TripPlanner banner & trigger logic
  • TripPlanner süre hesaplamaları
  • Explore → TripPlanner ekleme mantığı
  • AI öneri sistemi
  • Harita gösterimleri
  • Veri tutarlılığı

Lint Durumu

Tüm kontroller başarılı - hata yok