🏢 Muzibu Corporate Hierarchy

İki Farklı Yaklaşım: Tam B2B vs Minimal Değişiklik

İki Alternatif Detaylı Karşılaştırma 26 Kasım 2025
⚖️

İki Alternatif Özeti

PLAN A - TAM B2B

🏢 Gerçek Kurumsal Sistem

  • Firma → Şube → Kullanıcı hiyerarşisi
  • Rol bazlı yetkilendirme sistemi
  • Şube bazlı raporlama
  • 200+ şube desteği
  • Profesyonel B2B çözüm
👍 Artılar: Tam özellikli, ölçeklenebilir, profesyonel
👎 Eksiler: 4-5 yeni tablo, daha fazla kod, 1-2 hafta iş
PLAN B - MİNİMAL

✅ Mevcut Sistemi Genişlet

  • Mevcut yapıyı koruyarak geliştir
  • Sadece 1-2 alan ekle
  • Basit rol sistemi (JSON)
  • 50-100 şube için yeterli
  • Hızlı implementasyon
👍 Artılar: Hızlı, az değişiklik, düşük risk
👎 Eksiler: Sınırlı özellik, büyük ölçeklerde yetersiz
🏢

PLAN A - Tam B2B Sistemi

📊 Database Yapısı (4 Yeni Tablo)

1️⃣ muzibu_companies (Firmalar)

Ana şirketleri tutar. Örnek: Starbucks, McDonalds, Koçtaş...

AlanTipAçıklama
idbigintFirma kimliği
company_namestringFirma adı
company_codestringBenzersiz kod (davet için)
owner_user_idbigintFirma sahibi/admin
max_branchesintMaksimum şube sayısı
subscription_planenumbusiness, enterprise
payment_modelenumcentral, branch, hybrid
is_activebooleanAktif mi?

2️⃣ muzibu_branches (Şubeler)

Firmanın şubelerini tutar. Örnek: Starbucks Kadıköy, Starbucks Beşiktaş...

AlanTipAçıklama
idbigintŞube kimliği
company_idbigintHangi firmaya ait?
branch_namestringŞube adı
branch_codestringBenzersiz şube kodu
citystringŞehir
addresstextAdres
phonestringTelefon
manager_user_idbigintŞube yöneticisi
is_activebooleanAktif mi?

3️⃣ muzibu_roles (Roller)

Sistem genelinde tanımlı roller.

AlanTipAçıklama
idbigintRol kimliği
namestringcompany_admin, branch_manager, branch_employee
display_namestringFirma Yöneticisi, Şube Müdürü...
permissionsjsonYetki listesi

4️⃣ muzibu_user_roles (Kullanıcı-Rol İlişkisi)

Kullanıcının hangi firmada/şubede hangi rolü olduğunu tutar.

AlanTipAçıklama
idbigintKayıt kimliği
user_idbigintKullanıcı
role_idbigintRol
company_idbigintHangi firma için?
branch_idbigint nullableHangi şube için? (opsiyonel)

🏗️ Hiyerarşi Yapısı

🏢 Firma (Company)
├── 👤 Firma Admin (owner_user_id)
│ └── Yetkiler: Tüm şubeler, kullanıcılar, raporlar, fatura
├── 🏪 Şube 1 (Branch)
│ ├── 👤 Şube Yöneticisi (manager_user_id)
│ │ └── Yetkiler: Şube playlist, çalışanlar, anonslar, şube raporu
│ └── 👥 Çalışanlar (employees)
│ └── Yetkiler: Sadece müzik dinleme, beğenme
├── 🏪 Şube 2
├── 🏪 Şube 3
└── ... (200+ şube)

🔐 Rol & Yetki Sistemi

Roller ve İzinleri

👑 company_admin
• Tüm şubeleri görüntüle
• Şube ekle/sil
• Yönetici ata
• Firma raporları
• Abonelik/fatura yönetimi
🏪 branch_manager
• Kendi şubesini görüntüle
• Şube playlist yönetimi
• Çalışan ekle/çıkar
• Anons yönetimi
• Şube raporu
👤 branch_employee
• Müzik dinle
• Şarkı beğen
• Playlist görüntüle
• Kendi profili

📋 İşleyiş Mantığı

Senaryo: Starbucks Firması

  1. Firma Kaydı: Starbucks yetkilisi Muzibu'ya kaydolur.
    companies tablosuna kayıt → company_code: "STAR2025"
  2. Şube Ekleme: Firma admin "Kadıköy", "Beşiktaş", "Ataşehir" şubelerini ekler.
    branches tablosuna 3 kayıt
  3. Yönetici Atama: Her şube için bir manager atar.
    user_roles tablosuna kayıt (role: branch_manager)
  4. Çalışan Katılımı: Şube yöneticisi çalışanları davet eder.
    user_roles tablosuna kayıt (role: branch_employee, branch_id: Kadıköy)
  5. Müzik Yönetimi: Her şube kendi playlist'ini oluşturur.
    → Playlist'e branch_id eklenir
  6. Raporlama: Firma admin tüm şubelerin raporunu görür.
    → Dashboard'da company_id bazlı sorgular

⚙️ Implementasyon Adımları

FAZ 1

Database & Model

  • 4 migration dosyası oluştur
  • Company, Branch, Role, UserRole modelleri
  • İlişkileri kur (relationships)
  • Seeders hazırla (default roller)
FAZ 2

Servisler

  • CompanyService (CRUD, şube sayısı kontrolü)
  • BranchService (CRUD, manager atama)
  • PermissionService (yetki kontrolü helper)
FAZ 3

Admin Panel

  • /admin/muzibu/companies → Firma listesi
  • /admin/muzibu/companies/{id}/manage → Şube yönetimi
  • /admin/muzibu/branches/{id}/users → Çalışan yönetimi
  • Livewire componentler
FAZ 4

Raporlama

  • Firma bazlı istatistikler
  • Şube bazlı istatistikler
  • Karşılaştırmalı raporlar
FAZ 5

Ödeme Entegrasyonu

  • Subscription modülü ile bağlantı
  • Şube sayısına göre fiyatlandırma
  • Merkezi ödeme sistemi
⚠️ PLAN A SONUÇ: Tam özellikli, profesyonel, ölçeklenebilir sistem. 200+ şube için ideal. Tahmini süre: 1-2 hafta

PLAN B - Minimal Değişiklik (Mevcut Sistemi Genişlet)

🎯 Temel Fikir

Mevcut muzibu_corporate_accounts tablosunu kullan, sadece birkaç alan ekle!

✅ Avantaj: Mevcut sistem çalışmaya devam eder, sıfırdan kod yazmana gerek yok!

📊 Değişiklikler

1️⃣ Mevcut Tabloyu Genişlet

muzibu_corporate_accounts tablosuna sadece 3 alan ekle:

AlanTipAçıklama
branch_namestring nullableŞube adı (varsa)
roleenumowner, manager, employee
settingsjsonEsnek ayarlar (şehir, adres, max_members vb.)

🏗️ Basitleştirilmiş Hiyerarşi

🏢 Ana Firma (parent_id: null, role: owner)
├── 🏪 Şube 1 (parent_id: firma_id, role: manager)
│ ├── 👤 Çalışan 1 (parent_id: şube_id, role: employee)
│ └── 👤 Çalışan 2
├── 🏪 Şube 2 (parent_id: firma_id, role: manager)
│ └── 👤 Çalışanlar...
└── 🏪 Şube 3...

🔍 Mantık Farkı

Plan A (Tam B2B)

  • Firma → Ayrı tablo
  • Şube → Ayrı tablo
  • Kullanıcı → Ayrı ilişki
  • Rol → Ayrı tablo

Plan B (Minimal)

  • Her şey → corporate_accounts
  • Hiyerarşi → parent_id
  • Rol → role enum
  • Ayarlar → settings JSON

💻 Kod Değişiklikleri

1️⃣ Migration (Sadece 3 alan ekle)

// database/migrations/tenant/2025_11_26_add_branch_fields_to_corporate.php Schema::table('muzibu_corporate_accounts', function ($table) { $table->string('branch_name')->nullable(); $table->enum('role', ['owner', 'manager', 'employee'])->default('employee'); $table->json('settings')->nullable(); });

2️⃣ Model Güncelleme

// Sadece fillable ekle protected $fillable = [ ..., 'branch_name', 'role', 'settings', ]; protected $casts = [ 'settings' => 'array', ]; // Yeni helper metodlar public function isOwner(): bool { return $this->role === 'owner'; } public function isManager(): bool { return $this->role === 'manager'; } public function getBranches() { return $this->children()->where('role', 'manager')->get(); }

3️⃣ Kullanım Örnekleri

// Firma oluştur $firma = MuzibuCorporateAccount::create([ 'user_id' => $user->id, 'company_name' => 'Starbucks', 'role' => 'owner', 'settings' => ['max_branches' => 200], ]); // Şube ekle $sube = MuzibuCorporateAccount::create([ 'user_id' => $manager->id, 'parent_id' => $firma->id, 'branch_name' => 'Kadıköy Şubesi', 'role' => 'manager', 'settings' => ['city' => 'İstanbul', 'address' => '...'], ]); // Çalışan ekle $calisan = MuzibuCorporateAccount::create([ 'user_id' => $employee->id, 'parent_id' => $sube->id, 'role' => 'employee', ]);

⚙️ Implementasyon Adımları

ADIM 1 (30 dk)

Migration & Model

  • 3 alan ekle migration
  • Model'e fillable, casts, helper metodlar
ADIM 2 (1 saat)

Livewire Component Güncelle

  • Mevcut CorporateAccountComponent'i genişlet
  • Şube ekleme/düzenleme formu
  • Rol seçimi dropdown
ADIM 3 (1 saat)

Admin View Güncelle

  • Hiyerarşik liste görünümü
  • Şube kartları
  • Çalışan listesi
ADIM 4 (30 dk)

Test

  • Firma + Şube + Çalışan oluştur
  • Yetki kontrollerini test et
✅ PLAN B SONUÇ: Minimal değişiklik, hızlı implementasyon, 50-100 şube için yeterli. Tahmini süre: 3-4 saat
⚖️

Detaylı Karşılaştırma

📊 Özellik Karşılaştırması

Özellik PLAN A (Tam B2B) PLAN B (Minimal)
Yeni Tablo Sayısı 4 yeni tablo 0 (mevcut genişletilir)
Kod Miktarı ~2000 satır (model, service, view) ~500 satır (sadece genişletme)
Maksimum Şube Sınırsız (200+) 50-100 (performans düşer)
Rol Sistemi Ayrı tablo, esnek, genişletilebilir Enum, 3 sabit rol
Raporlama Firma/şube bazlı detaylı Basit, parent-child sorguları
Ödeme Entegrasyonu 3 model (merkezi, şube, hibrit) Sadece merkezi
Geliştirme Süresi 1-2 hafta 3-4 saat
Bakım Maliyeti Orta (daha fazla kod) Düşük (az kod)
Ölçeklenebilirlik Mükemmel Sınırlı
Risk Orta (yeni sistem) Düşük (mevcut genişletme)

🎯 Hangi Planı Seçmeliyim?

PLAN A'yı Seç Eğer:

✅ 100+ şube hedefliyorsan
✅ Profesyonel B2B satışı yapacaksan
✅ Enterprise müşteriler varsa
✅ Gelecekte çok özellik eklenecekse
✅ 1-2 hafta ayırabiliyorsan
PLAN B'yi Seç Eğer:

✅ Hızlı sonuç istiyorsan
✅ 10-50 şube yeterli
✅ MVP test etmek istiyorsan
✅ Mevcut sistemi bozmak istemiyorsan
✅ Bugün bitirmek istiyorsan
🎯

Hibrit Yaklaşım (ÖNERİM)

💡 BENİM ÖNERİM: PLAN B ile başla, ihtiyaç oldukça PLAN A'ya geç!

🚀 Aşamalı Geçiş Stratejisi

FAZ 1 (BUGÜN)

Plan B ile Başla (3-4 saat)

  • Mevcut tabloyu genişlet
  • Basit rol sistemi ekle
  • Admin panel güncelle
  • İlk 5-10 müşteri ile test et
FAZ 2 (1 AY SONRA)

Geri Bildirim Topla

  • Müşterilerden istekler al
  • Hangi özellikler gerçekten lazım?
  • 50+ şube potansiyeli var mı?
  • Performans sorunları var mı?
FAZ 3 (GEREKİRSE)

Plan A'ya Geçiş (1 hafta)

  • Yeni tabloları oluştur
  • Mevcut verileri migrate et
  • Tam B2B sistemi kur
  • Müşterilere bilgi ver

✅ Neden Bu Strateji?

  • Düşük Risk: Mevcut sistem bozulmaz, Plan B minimal değişiklik
  • Hızlı Pazar Testi: Bugün yayına alırsın, müşteri tepkisini görürsün
  • Gerçek İhtiyaç: Belki 50 şube bile olmaz, gereksiz karmaşık sistem kurmazsın
  • Esnek Geçiş: Gerçekten 100+ şube olursa Plan A'ya geçersin
  • Zaman Kazancı: 1-2 hafta beklemeden bugün canlıya çıkarsın
🎯

Sonuç & Tavsiye

💭 Benim Tavsiyem

PLAN B ile başla! 3-4 saat içinde kurumsal sistemi hazır hale getir. İlk 10-20 müşteriyle test et. Eğer 50+ şube talepleri gelirse veya sistem yavaşlarsa, o zaman PLAN A'ya geç.

✅ BAŞLANGIÇ İÇİN PLAN B YETERLİ!

Çoğu firma 5-20 şube arası. 100+ şube gerçekten çok nadir.
Önce basit olanı kur, müşteri geribildirimini al, sonra genişlet.

📋 Bir Sonraki Adım

Senin kararına göre hangi planı uygulayalım?

Seçenek 1:
PLAN B ile başla
(3-4 saat)
Seçenek 2:
Direkt PLAN A
(1-2 hafta)
Seçenek 3:
Hibrit (Öneri)
(Plan B → Plan A)