update deploy
This commit is contained in:
246
prompts/admin-leads.md
Normal file
246
prompts/admin-leads.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user