# Admin Panel — Leads (Başvuru Yönetimi) Modülü

## Genel Bakış

Web sitesindeki formlardan gelen tüm başvurular `leads` tablosuna yazılır. Admin panelden başvurular listelenir, detay görüntülenir, durum güncellenir ve not eklenir. **Lead'ler sadece API'den oluşur — admin panelde "Yeni Oluştur" butonu olmayacak.**

---

## API Endpoints (Admin — auth:sanctum)

| Method | Endpoint | Açıklama |
|--------|----------|----------|
| `GET` | `/admin/leads` | Başvuruları listele (paginated, filtrelenebilir) |
| `GET` | `/admin/leads/{id}` | Başvuru detayı (otomatik okundu işaretler) |
| `PUT` | `/admin/leads/{id}` | Durum/not güncelle |
| `DELETE` | `/admin/leads/{id}` | Başvuru sil (soft delete) |

---

## GET /admin/leads — Liste

### Query Parametreleri:
| Parametre | Tip | Açıklama |
|-----------|-----|----------|
| `status` | string | Durum filtresi: `new`, `contacted`, `enrolled`, `cancelled` |
| `source` | string | Kaynak filtresi: `kurs_kayit`, `danismanlik`, `duyuru`, `iletisim` |
| `is_read` | boolean | Okundu/okunmadı filtresi |
| `search` | string | İsim/telefon arama |
| `per_page` | integer | Sayfa başına (varsayılan: 15) |

### Response:
```json
{
  "data": [
    {
      "id": 1,
      "name": "Ahmet Yılmaz",
      "phone": "+90 532 724 15 32",
      "email": "ahmet@email.com",
      "source": "kurs_kayit",
      "status": "new",
      "target_course": "gemici-birlesik-egitimi",
      "education_level": "lise",
      "subject": null,
      "message": "Eğitim hakkında bilgi almak istiyorum",
      "is_read": false,
      "kvkk_consent": true,
      "marketing_consent": false,
      "utm_source": "google",
      "utm_medium": "cpc",
      "utm_campaign": "denizcilik-2026",
      "admin_note": null,
      "created_at": "2026-03-24T10:30:00.000000Z",
      "updated_at": "2026-03-24T10:30:00.000000Z"
    }
  ],
  "meta": { "current_page": 1, "last_page": 5, "per_page": 15, "total": 72 }
}
```

---

## GET /admin/leads/{id} — Detay

Detay açıldığında backend otomatik olarak `is_read: true` yapar.

---

## PUT /admin/leads/{id} — Güncelle

Admin sadece şu alanları güncelleyebilir:

```json
{
  "status": "contacted",
  "is_read": true,
  "admin_note": "Arandı, bilgi verildi. Nisan dönemine kayıt olacak."
}
```

---

## Veri Modeli

### Lead Alanları

| Alan | Tip | Açıklama |
|------|-----|----------|
| `id` | integer | — |
| `name` | string | Ad Soyad |
| `phone` | string | Telefon |
| `email` | string (nullable) | E-posta |
| `source` | enum | Başvuru kaynağı (form tipi) |
| `status` | enum | İşlem durumu |
| `target_course` | string (nullable) | Hedef eğitim slug'ı |
| `education_level` | string (nullable) | Eğitim seviyesi |
| `subject` | string (nullable) | Konu (iletişim formunda) |
| `message` | text (nullable) | Mesaj |
| `is_read` | boolean | Admin tarafından okundu mu |
| `kvkk_consent` | boolean | KVKK onayı |
| `marketing_consent` | boolean | Pazarlama onayı |
| `utm_source` | string (nullable) | UTM Source |
| `utm_medium` | string (nullable) | UTM Medium |
| `utm_campaign` | string (nullable) | UTM Campaign |
| `admin_note` | text (nullable) | Admin notu |
| `created_at` | datetime | Başvuru tarihi |

### Source (Kaynak) Değerleri

| Değer | Açıklama | Hangi Form? |
|-------|----------|-------------|
| `kurs_kayit` | Kurs ön kayıt | Eğitim detay sayfası kayıt formu |
| `danismanlik` | Danışmanlık | Danışmanlık sayfası formu |
| `duyuru` | Duyuru | Duyuru sidebar'daki mini form |
| `iletisim` | İletişim | İletişim sayfası formu |
| `hero_form` | Hero form | Anasayfa hero bölümü formu |
| `whatsapp_widget` | WhatsApp | WhatsApp widget üzerinden gelen |

### Status (Durum) Değerleri

| Değer | Label | Badge Rengi | Açıklama |
|-------|-------|-------------|----------|
| `new` | Yeni | `warning` (sarı) | Henüz işlenmemiş |
| `contacted` | İletişim Kuruldu | `info` (mavi) | Aranmış/e-posta gönderilmiş |
| `enrolled` | Kayıt Oldu | `success` (yeşil) | Eğitime kaydolmuş |
| `cancelled` | İptal | `danger` (kırmızı) | Vazgeçmiş/iptal |

---

## Önerilen Admin Panel Sayfası

### Liste Sayfası (`/admin/leads`)

```
┌─────────────────────────────────────────────────────────────┐
│ Başvurular                                    [Filtreler ▼] │
├─────────────────────────────────────────────────────────────┤
│ Filtreler: [Kaynak ▼] [Durum ▼] [Okundu ▼] [Ara...]       │
├──────┬──────────────┬──────────────┬────────────┬───────────┤
│  ●   │ Ahmet Yılmaz │ +90 532 ... │ kurs_kayit │ 🟡 Yeni  │
│  ○   │ Mehmet Kaya  │ +90 555 ... │ iletisim   │ 🔵 İlet. │
│  ○   │ Ayşe Demir   │ +90 212 ... │ danismanlik│ 🟢 Kayıt │
└──────┴──────────────┴──────────────┴────────────┴───────────┘
  ● = okunmadı (bold göster)   ○ = okundu
```

#### Tablo Sütunları:
| Sütun | Açıklama |
|-------|----------|
| Okundu göstergesi | `is_read` false ise bold/dot göster |
| Ad Soyad | `name` |
| Telefon | `phone` |
| E-posta | `email` (varsa) |
| Kaynak | `source` — badge ile göster |
| Hedef Eğitim | `target_course` (varsa) |
| Durum | `status` — renkli badge |
| Tarih | `created_at` — relative (2 saat önce) |

#### Kaynak Badge Renkleri:
| Source | Renk |
|--------|------|
| `kurs_kayit` | `primary` (mavi) |
| `danismanlik` | `purple` |
| `duyuru` | `orange` |
| `iletisim` | `teal` |
| `hero_form` | `indigo` |
| `whatsapp_widget` | `green` |

### Detay/Düzenleme Sayfası (`/admin/leads/{id}`)

```
┌─────────────────────────────────────────────────┐
│ Başvuru #42 — Ahmet Yılmaz                      │
├─────────────────────────────────────────────────┤
│ Bilgiler                                         │
│ ┌─────────────────┬───────────────────────────┐ │
│ │ Ad Soyad        │ Ahmet Yılmaz              │ │
│ │ Telefon         │ +90 532 724 15 32         │ │
│ │ E-posta         │ ahmet@email.com           │ │
│ │ Kaynak          │ 🔵 kurs_kayit             │ │
│ │ Hedef Eğitim    │ Gemici (Birleşik) Eğitimi │ │
│ │ Eğitim Seviyesi │ Lise                      │ │
│ │ Mesaj           │ Bilgi almak istiyorum      │ │
│ │ KVKK Onay       │ ✅ Evet                   │ │
│ │ Pazarlama Onay  │ ❌ Hayır                  │ │
│ │ Tarih           │ 24 Mar 2026, 10:30        │ │
│ └─────────────────┴───────────────────────────┘ │
│                                                   │
│ UTM Bilgileri                                     │
│ ┌─────────────────┬───────────────────────────┐ │
│ │ utm_source      │ google                    │ │
│ │ utm_medium      │ cpc                       │ │
│ │ utm_campaign    │ denizcilik-2026           │ │
│ └─────────────────┴───────────────────────────┘ │
│                                                   │
│ İşlem                                             │
│ ┌───────────────────────────────────────────────┐│
│ │ Durum:  [Yeni ▼]  → contacted / enrolled /.. ││
│ │                                                ││
│ │ Admin Notu:                                    ││
│ │ ┌─────────────────────────────────────────┐   ││
│ │ │ Arandı, bilgi verildi. Nisan dönemine   │   ││
│ │ │ kayıt olacak.                            │   ││
│ │ └─────────────────────────────────────────┘   ││
│ │                                                ││
│ │                              [Kaydet]          ││
│ └───────────────────────────────────────────────┘│
└─────────────────────────────────────────────────┘
```

#### Düzenleme Kuralları:
- Başvuru bilgileri (name, phone, message vb.) **readonly** — sadece görüntüleme
- Sadece `status`, `is_read` ve `admin_note` düzenlenebilir
- `target_course` slug ise, linke çevir: `/admin/courses/{slug}/edit`
- "Yeni Oluştur" butonu **yok** — lead'ler sadece frontend formlarından gelir

---

## İstatistik Kartları (Dashboard için, opsiyonel)

Liste sayfasının üstüne istatistik kartları eklenebilir:

```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│  🟡 Yeni     │ │  🔵 İletişim │ │  🟢 Kayıt    │ │  📊 Toplam   │
│     12       │ │     28       │ │     45       │ │     93       │
│  Bu hafta: 5 │ │  Bu hafta: 8 │ │  Bu ay: 15   │ │  Bu ay: 32   │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
```

API'den alınabilir:
```
GET /admin/leads?status=new        → meta.total
GET /admin/leads?status=contacted  → meta.total
GET /admin/leads?status=enrolled   → meta.total
GET /admin/leads                   → meta.total
```

---

## Notlar

- `is_read` detay sayfası açıldığında otomatik `true` olur (backend tarafından)
- Soft delete kullanılıyor — silinen lead'ler geri alınabilir
- UTM verileri backend'de tek JSON sütununda (`utm`) saklanır, API response'da ayrı ayrı döner
- KVKK ve pazarlama onayları readonly gösterilmeli — admin tarafından değiştirilemez
