# MAGOSTORE — SIFIRDAN MİMARİ

Karar: Botble'ı motor olarak kullanmıyoruz. Sıfırdan kendi sistemimizi yazıyoruz,
Botble'a yalnızca **ne gerekiyor** sorusunun cevabı için bakıyoruz.

Bu doküman o kararın nasıl **fırlatılabilir** hale getirileceğini anlatıyor.

---

## 1. Gerçek envanter — neyin var olması gerekiyor

Botble'ın e-ticaret + pazaryeri katmanını saydım:

| | Sayı |
|---|---|
| Model | 68 + 8 (pazaryeri) |
| Controller | 50 |
| Migration | 156 |
| Altyapı paketi | 13 (medya, menü, tema, SEO, sitemap, slug, widget, revizyon, kurulum…) |

Bu, "bir pazaryeri şu kadar parçadan oluşur" demenin dürüst ölçüsü. Ve senin
27 bölümlük spec'in bunun **üstünde** — reklam motoru, fraud skorlama, canlı
yayın alışverişi, AI öneri gibi Botble'da hiç olmayan şeyler var.

### Ama MVP bunların hepsini istemiyor

68 modelin yaklaşık **20'si** ilk gerçek siparişi almak için yeterli. Gerisi
"olmasa da satış olur" kategorisinde.

Bu ayrımı yapmamak, sıfırdan projelerin battığı yer. Aşağıdaki kesit o yüzden
kesin: MVP dışındakiler **canlıya çıktıktan sonra** yazılır.

---

## 2. Elimizde zaten olan: en zor %30

Faz 3 ve 4'te yazdığımız kod **çerçeveden bağımsız alan mantığı.** Botble'a
hiç bağlı değil, sıfırdan projeye olduğu gibi giriyor:

| Modül | Sınıf | Tablo |
|---|---|---|
| Çift taraflı defter | 3 | 11 |
| Hakediş yaşam döngüsü | 6 | 5 |
| iyzico pazaryeri (alt üye, onay, mutabakat) | 3 | 3 |
| Ortak katalog + buybox | 6 | 5 |
| İş günü takvimi, IBAN, GTIN | 3 | 1 |
| **Toplam** | **23** | **23** (+2 destek) |

Bu, projenin en riskli kısmı — para, mevzuat, mutabakat. Ve bitmiş durumda,
simülasyonla doğrulanmış. Sıfırdan başlamak bunu **çöpe atmak değil**, tam
tersine: geri kalanı bunun etrafına inşa etmek.

Sadece iki dokunuş gerekiyor:
- `use Botble\Marketplace\Models\Store;` → kendi `Store` modelimiz
- `use Botble\Ecommerce\Models\Order;` → kendi `Order` modelimiz
- `FriendsOfBotble\Iyzipay\Iyzipay\*` → iyzico resmi SDK'sı (`composer require iyzico/iyzipay-php`)

Üç satır, üç dosyada. Gerisi olduğu gibi çalışıyor.

---

## 3. Yığın kararı — ve neden bu 12 ayı 5 aya indiriyor

| Katman | Seçim | Gerekçe |
|---|---|---|
| Çerçeve | Laravel 12 | Zaten biliyoruz, kod hazır |
| **Admin paneli** | **Filament 4** | **En kritik karar — aşağıya bak** |
| Vitrin | Blade + Livewire 3 | SEO için sunucu tarafı render, JS derdi yok |
| Arama | Meilisearch | Türkçe destekli, kurulumu basit |
| Ödeme | iyzico resmi SDK | Pazaryeri (alt üye) modeli |
| Kuyruk | Redis + Horizon | Hakediş ve onay işleri kuyrukta |
| Medya | Spatie Media Library | Botble'ın medya paketinin karşılığı |
| Yetki | Spatie Permission | 15 kullanıcı tipi + yetki matrisi |
| Test | Pest | |

### Filament neden belirleyici

Botble'ın **50 controller**ının neredeyse tamamı admin CRUD'u: ürün listesi,
sipariş listesi, satıcı listesi, filtre, sıralama, toplu işlem, form, doğrulama.

Filament bunu **kaynak sınıflarından üretiyor.** Ürün yönetimi ekranı için
50 controller yerine bir `ProductResource` sınıfı yazıyorsun; tablo, filtre,
form, toplu işlem, yetki kontrolü hazır geliyor.

Kaba karşılaştırma:

| İş | Elle | Filament ile |
|---|---|---|
| 20 varlık için admin CRUD | ~10 hafta | ~2 hafta |
| Filtre, sıralama, toplu işlem | dahil değil | hazır |
| Satıcı paneli (ayrı panel) | ~4 hafta | ~1 hafta (multi-panel) |

**Ve Filament'in ikinci paneli satıcı panelidir.** Aynı altyapı, farklı yetki
kapsamı. Botble'da bu ayrı bir tema işiydi.

Dürüst tahmin: Filament'siz MVP **10–14 ay**, Filament ile **4–6 ay** (tam
zamanlı bir geliştirici). Fark, elle CRUD yazmamaktan geliyor.

---

## 4. MVP kesiti — ilk gerçek siparişi almak için minimum

Kural: bu listede olmayan hiçbir şey MVP'ye girmez. İtiraz edilecek yer burası,
kod yazılırken değil.

### İÇİNDE (22 tablo, ~15 model)

**Kimlik ve yetki**
- Kullanıcı (admin / satıcı / müşteri tek tabloda, rol ile ayrılır)
- Rol ve izin (Spatie)
- Satıcı başvurusu → onay akışı

**Katalog**
- Kategori (ağaç, sınırsız derinlik)
- Marka
- Katalog kaydı (`mg_catalog_items`) ✅ **hazır**
- Satıcı teklifi (`mg_product_offers`) ✅ **hazır**
- Varyant (renk/beden — tek seviye, iki boyut)
- Görsel (Media Library)

**Satış**
- Sepet (oturum tabanlı, satıcıya göre gruplu)
- Sipariş + sipariş satırı
- Sipariş durumu (basit: 8 durum, 20 değil)
- Adres

**Para** ✅ **tamamı hazır**
- Defter, hakediş, stopaj, onay motoru, mahsup
- iyzico alt üye + onay

**Kargo**
- Tek firma entegrasyonu (Yurtiçi)
- Desi bazlı tarife
- Etiket üretimi + durum webhook'u

**Zorunlu mevzuat**
- Mesafeli satış + ön bilgilendirme metni
- Ana sayfada iletişim bilgileri + işlem rehberi (Yönetmelik m.6, m.7)
- Dâhili iletişim sistemi (satıcı bildirimleri)
- Sözleşme versiyonlama ✅ **hazır**

**Vitrin**
- Ana sayfa, kategori listesi, ürün detay, sepet, ödeme, sipariş takibi
- Arama (Meilisearch)

### DIŞINDA — canlıya çıktıktan sonra

Kupon ve kampanya motoru · flash satış · yorum ve puanlama · soru-cevap ·
favoriler · karşılaştırma · cüzdan ve puan sistemi · reklam ve sponsorlu ürün ·
fraud skorlama · uyuşmazlık hakemliği · çoklu dil · çoklu para birimi ·
blog ve CMS · e-arşiv otomasyonu (ilk ayda elle) · ikinci kargo firması ·
mobil uygulama · AI'nın tamamı

**Neden dışında:** hiçbiri ilk siparişi almayı engellemiyor. Kupon olmadan da
satış olur. Yorum olmadan da olur. Bunları MVP'ye koymak, canlıya çıkışı 4 ay
öteler ve o 4 ayda hiçbir şey öğrenmezsin.

---

## 5. Modül haritası

```
app/
├─ Domain/                        alan mantığı, çerçeveden bağımsız
│  ├─ Ledger/          ✅ hazır  çift taraflı defter
│  ├─ Settlement/      ✅ hazır  hakediş, stopaj, mahsup
│  ├─ Catalog/         ✅ hazır  katalog, teklif, buybox
│  ├─ Psp/             ✅ hazır  iyzico alt üye, onay
│  ├─ Shipping/           yeni   kargo tarife, etiket, takip
│  ├─ Ordering/           yeni   sepet, sipariş, durum makinesi
│  ├─ Identity/           yeni   kullanıcı, satıcı başvurusu, yetki
│  └─ Support/         ✅ hazır  iş günü, IBAN, GTIN
│
├─ Models/                        Eloquent modelleri
├─ Filament/
│  ├─ Admin/                      pazaryeri yönetim paneli
│  └─ Vendor/                     satıcı paneli (aynı altyapı)
├─ Http/
│  ├─ Controllers/Shop/           vitrin
│  └─ Livewire/                   sepet, filtre, arama
└─ Jobs/                          hakediş, onay, mutabakat, buybox
```

`Domain/` klasörü kritik: alan mantığı Eloquent'e, Filament'e, HTTP'ye bağlı
değil. Bu sayede test edilebiliyor ve arayüz değişse ayakta kalıyor. Bugün
yazdığımız 23 sınıf zaten bu disiplinde.

---

## 6. Aşamalar

| # | Ne | Süre | Çıktı |
|---|---|---|---|
| **A** | İskelet: Laravel + Filament + yetki + kullanıcı | 2 hafta | Panele giriş yapılıyor |
| **B** | Katalog: kategori, marka, katalog kaydı, teklif, varyant, görsel | 4 hafta | Ürün girilebiliyor |
| **C** | Vitrin: ana sayfa, liste, detay, arama | 4 hafta | Ürün görünüyor |
| **D** | Sepet ve sipariş: satıcıya göre gruplu sepet, sipariş oluşturma | 3 hafta | Sipariş kaydı düşüyor |
| **E** | Ödeme: iyzico alt üye + kırılım (kod hazır, bağlanacak) | 2 hafta | Para tahsil ediliyor |
| **F** | Hakediş: defter bağlanır (kod hazır) | 1 hafta | Satıcı ödeme alıyor |
| **G** | Kargo: Yurtiçi entegrasyonu | 3 hafta | Etiket, takip |
| **H** | Satıcı paneli: Filament ikinci panel | 2 hafta | Satıcı kendi işini yönetiyor |
| **I** | Mevzuat: sözleşmeler, dâhili iletişim, işlem rehberi | 2 hafta | Yasal uyum |
| **J** | Sertleştirme: test, yük, güvenlik, yedek | 2 hafta | Canlıya hazır |

**Toplam ~25 hafta / 6 ay** (tam zamanlı bir geliştirici, Filament ile).

E ve F aşamaları **kod yazmak değil bağlamak** — o iki modül bitmiş durumda.
Bu, tipik bir sıfırdan projede en riskli 8 haftayı 3 haftaya indiriyor.

---

## 7. Bu kararın dürüst maliyeti

Karşılaştırma yapmadan geçmek doğru olmaz:

| | Mevcut Botble yolu | Sıfırdan |
|---|---|---|
| İlk siparişe kalan | ~3 hafta (kurulum + tema + karar) | ~6 ay |
| Bugün çalışan kod | Hepsi | Para + katalog (%30) |
| Kod tabanı sahipliği | Motor Botble, katmanlar bizim | Tamamı bizim |
| Bakım | Donuk fork, güvenlik yaması riski | Tamamen kontrol |
| Özelleştirme sınırı | Botble'ın modeli neyi izin verirse | Sınır yok |
| Lisans bağı | Var | Yok |

Sıfırdan yolun asıl kazancı **kod sahipliği ve sınırsız özelleştirme.**
Asıl bedeli **6 ay** ve o 6 ayda hiç satış olmaması.

Bir orta yol var ve söylemeden geçmeyeceğim: **Botble ile canlıya çık, paralel
sıfırdan yaz.** Botble ilk satıcılarını ve gerçek verini toplarken sen doğru
sistemi kuruyorsun; hazır olunca veriyi taşıyorsun. Bu, "6 ay hiç satış yok"
maliyetini sıfırlar. Ama iki sistem birden yönetmek demek — kararı sen ver.

---

## 8. Şimdi ne yapıyorum

Kararın sıfırdansa, **A aşamasından** başlıyorum: Laravel iskeletini,
Filament kurulumunu, kullanıcı/rol modelini ve mevcut 23 sınıfın yeni yapıya
taşınmasını yazıyorum.

İlk somut çıktı: çekirdek şema (kullanıcı, satıcı, kategori, marka, ürün,
varyant, sipariş) — yani mevcut para ve katalog modüllerimizin beklediği
tabloların sıfırdan hali.

Başlamadan önce iki şeye ihtiyacım var:

**1. Orta yol mu, tam sıfırdan mı?** Yukarıdaki 7. bölüm. Bu cevabı bilmeden
A aşamasını yazmak boşa gidebilir.

**2. Filament onayı.** MVP süresini yarıya indiren tek karar bu. İtirazın
varsa (öğrenme eğrisi, lisans — Filament MIT, ücretsiz) şimdi söyle.
