175 lines
3.8 KiB
Markdown
175 lines
3.8 KiB
Markdown
# 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
|
||
```sql
|
||
ALTER TABLE places ADD COLUMN IF NOT EXISTS duration text;
|
||
```
|
||
|
||
### Eklenen Import'lar
|
||
```typescript
|
||
import {
|
||
Select,
|
||
SelectContent,
|
||
SelectItem,
|
||
SelectTrigger,
|
||
SelectValue,
|
||
} from '@/components/ui/select';
|
||
```
|
||
|
||
### Yeni Sabitler
|
||
```typescript
|
||
const PLACE_TYPES = [
|
||
'museum',
|
||
'historical',
|
||
'viewpoint',
|
||
'restaurant',
|
||
'activity',
|
||
'hot-air-balloon',
|
||
'atv',
|
||
'horse-riding',
|
||
'tour',
|
||
'hotel',
|
||
] as const;
|
||
```
|
||
|
||
### Güncellenmiş Interface'ler
|
||
|
||
**Place Interface:**
|
||
```typescript
|
||
interface Place {
|
||
// ... diğer alanlar
|
||
duration: string | null;
|
||
}
|
||
```
|
||
|
||
**PlaceFormValues Interface:**
|
||
```typescript
|
||
interface PlaceFormValues {
|
||
// ... diğer alanlar
|
||
duration: string;
|
||
}
|
||
```
|
||
|
||
### Form Validasyonları
|
||
|
||
**Type Field:**
|
||
```typescript
|
||
rules={{ required: 'Tür seçimi zorunludur' }}
|
||
```
|
||
|
||
**Duration Field:**
|
||
```typescript
|
||
rules={{ required: 'Süre zorunludur' }}
|
||
```
|
||
|
||
**Latitude Field:**
|
||
```typescript
|
||
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:**
|
||
```typescript
|
||
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
|