# 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