# Trip Create Security - Quick Reference

## 🚀 Hızlı Başlangıç

### Frontend'de Kullanım
```typescript
import { tripsApiSafe } from '@/db/api';

// ✅ DOĞRU
const trip = await tripsApiSafe.create({
  title: "İstanbul Gezisi",
  destination: "İstanbul",
  start_date: "2026-03-01",
  end_date: "2026-03-10"
});

// ❌ YANLIŞ
const trip = await tripsApi.create({ ... }); // Güvensiz!
```

---

## 🔒 Güvenlik Özellikleri

| Özellik | Açıklama | Hata Mesajı |
|---------|----------|-------------|
| **Auth Mandatory** | Giriş zorunlu | "Seyahat oluşturmak için giriş yapmalısınız." |
| **Rate Limiting** | 5 trip/saat | "Saatlik limit aşıldı. X dakika sonra tekrar deneyin." |
| **Title Validation** | 3-200 karakter | "Seyahat başlığı en az 3 karakter olmalıdır." |
| **Date Validation** | Geçerli tarih | "Bitiş tarihi başlangıç tarihinden önce olamaz." |
| **Location Validation** | Geçerli koordinat | "Enlem değeri -90 ile 90 arasında olmalıdır." |

---

## 📋 Validation Kuralları

### Başlık (title)
- ✅ Min: 3 karakter
- ✅ Max: 200 karakter
- ✅ Zorunlu

### Açıklama (description)
- ✅ Max: 2000 karakter
- ✅ Opsiyonel

### Tarihler (start_date, end_date)
- ✅ Geçerli ISO format (YYYY-MM-DD)
- ✅ end_date >= start_date
- ✅ Max süre: 365 gün

### Konum (start_lat, start_lng)
- ✅ Enlem: -90 ile 90 arası
- ✅ Boylam: -180 ile 180 arası

### İlgi Alanları (interests)
- ✅ Max: 20 adet
- ✅ Her biri max 50 karakter

---

## 🧪 Test Komutları

```bash
# Lint kontrolü
npm run lint

# Type check
npm run type-check

# Build
npm run build
```

---

## 📊 Rate Limiter Utility

```typescript
import { rateLimiter } from '@/utils/rateLimiter';

// Limit kontrolü
rateLimiter.check('trip_create_user123', 5, 3600000);

// Kalan istek sayısı
const remaining = rateLimiter.remaining('trip_create_user123', 5);

// Sıfırlanma zamanı
const resetTime = rateLimiter.resetTime('trip_create_user123');

// Manuel sıfırlama (test için)
rateLimiter.reset('trip_create_user123');
```

---

## 🔍 Security Logs

```typescript
// Log formatı
[SECURITY AUDIT] 2026-02-08T10:30:00.000Z | Event: TRIP_CREATE_SUCCESS | User: user-uuid | Details: { ... }

// Log olayları
- TRIP_CREATE_FAILED          // Yetkisiz erişim
- TRIP_CREATE_RATE_LIMITED    // Rate limit aşımı
- TRIP_CREATE_VALIDATION_FAILED // Geçersiz input
- TRIP_CREATE_DB_ERROR        // Veritabanı hatası
- TRIP_CREATE_SUCCESS         // Başarılı oluşturma
```

---

## 🐛 Hata Yakalama

```typescript
try {
  const trip = await tripsApiSafe.create({ ... });
} catch (error: any) {
  // error.message kullanıcıya gösterilebilir
  toast.error(error.message);
  
  // Detaylı log için
  console.error('Trip creation error:', error);
}
```

---

## 📚 Daha Fazla Bilgi

- **Detaylı Test Senaryoları**: `TRIP_CREATE_SECURITY_TESTS.md`
- **Implementasyon Özeti**: `TRIP_CREATE_SECURITY_SUMMARY.md`
- **Rate Limiter Utility**: `src/utils/rateLimiter.ts`
- **API Implementation**: `src/db/api.ts` (satır 1052+)

---

## ⚠️ Önemli Notlar

1. **Her zaman `tripsApiSafe.create()` kullanın**
2. **Hata mesajlarını kullanıcıya gösterin** (`error.message`)
3. **Rate limit için Redis kullanımı önerilir** (production)
4. **Security logları düzenli kontrol edin**
5. **Test senaryolarını çalıştırın**

---

## 🎯 Checklist

- [ ] `tripsApiSafe.create()` kullanıldı mı?
- [ ] Hata mesajları kullanıcıya gösteriliyor mu?
- [ ] Auth kontrolü yapılıyor mu?
- [ ] Rate limiting aktif mi?
- [ ] Input validation çalışıyor mu?
- [ ] Security logları görünüyor mu?
