3.8 KiB
3.8 KiB
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:
requiredvalidasyonu 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
durationkolonu 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:
placestablosu
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
- ✅ Yeni yer eklerken tür seçimi zorunlu mu?
- ✅ Tür dropdown'ında sadece belirlenen türler var mı?
- ✅ Latitude/Longitude boş bırakılamıyor mu?
- ✅ 0,0 koordinatı engellenmiş mi?
- ✅ Geçersiz koordinat aralıkları reddediliyor mu?
- ✅ Duration alanı zorunlu mu?
- ✅ Duration alanı database'e kaydediliyor mu?
- ✅ 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