# Web Push (Browser Kapalıyken Bildirim) — Kurulum Adımları

SSH erişimin olmadığı için kurulum **iki tarafta** yapılır:
- **Lokalde** (bu klasör — `d:\Projeler 02.03.2026\Demo Web\muhasebe`): `composer install` çalıştırılıp `vendor/` klasörü sunucuya yüklenir.
- **Sunucuda** (web tarayıcı üzerinden): `public/yonet.php` ile cache temizlik + migrate + VAPID üretimi.

---

## 1. LOKAL ADIMLAR (kendi bilgisayarında PowerShell veya CMD)

### 1.1 Composer paketi yükle

PowerShell aç, projeye git:

```powershell
cd "d:\Projeler 02.03.2026\Demo Web\muhasebe"
composer require minishlink/web-push:^9.0
```

> Eğer `composer` komutu tanınmıyorsa, Composer'ı [getcomposer.org](https://getcomposer.org/) üzerinden indir.
> Bu komut otomatik olarak `composer.json`'ı günceller ve `vendor/` klasörüne paketi ekler.

### 1.2 Vendor klasörünü sunucuya yükle

SFTP istemcinden (VSCode SFTP eklentin ya da FileZilla):
- **`vendor/`** klasörünü olduğu gibi sunucudaki proje köküne yükle (overwrite/merge OK).
- Sürer çünkü 5000+ dosya. Sabırlı ol veya sadece yeni eklenen `vendor/minishlink/` alt klasörünü yükleyebilirsin (daha hızlı).

### 1.3 Diğer dosyaları gönder

VSCode'da açık olan tüm push dosyalarını da gönder:
- `composer.json` (paket eklendi)
- `composer.lock` (lock dosyası güncel olmalı, vendor ile aynı zamanda)
- `database/migrations/2026_06_05_000002_push_subscriptions.php`
- `app/Models/PushSubscription.php`
- `app/Models/Bildirim.php`
- `app/Http/Controllers/PushSubscriptionController.php`
- `app/Services/WebPushService.php`
- `app/Console/Commands/WebPushVapidUret.php`
- `app/Http/Middleware/HandleInertiaRequests.php`
- `routes/web.php`
- `public/sw.js`
- `public/yonet.php`
- `resources/js/lib/webpush.ts`
- `resources/js/Components/BildirimDropdown.tsx`
- `public/build/` (tümünü overwrite)

---

## 2. SUNUCU ADIMLARI (tarayıcı üzerinden)

### 2.1 Yönetim aracını aç

Tarayıcıda aç:

```
https://siteniz.com/yonet.php?token=APP_KEY_SON_16_KARAKTER
```

> Token: `.env` dosyandaki `APP_KEY=base64:xxxx...` değerinin **son 16 karakteri**.
> Örnek: `APP_KEY=base64:abcde...wxyz1234` → token = `wxyz1234XXXXXXXX` gibi son 16.

### 2.2 Sırayla çalıştır

Yönetim aracında butonlara şu sırayla bas:

1. **🩺 Sistem Özeti** — DB bağlantısı / yazılabilirlik / OPcache kontrol
2. **🔔 Web Push → "Durumu Kontrol Et"** — şu anda eksikleri gösterecek (paket yok, tablo yok, VAPID yok)
3. **🗄️ migrate** — `push_subscriptions` tablosunu oluşturur
4. **🔔 "VAPID Anahtarı Üret"** — ekrana üç satır basar:
   ```
   WEBPUSH_VAPID_PUBLIC=...
   WEBPUSH_VAPID_PRIVATE=...
   WEBPUSH_VAPID_SUBJECT=mailto:admin@firma.com
   ```
   **Bu üç satırı kopyala**.

### 2.3 .env dosyasını düzenle

SFTP istemcinden sunucudaki `.env` dosyasını aç, en alta ekle:

```
WEBPUSH_VAPID_PUBLIC=...   ← üretilen değer
WEBPUSH_VAPID_PRIVATE=...  ← üretilen değer (GİZLİ tut!)
WEBPUSH_VAPID_SUBJECT=mailto:senin@firma.com   ← gerçek e-posta
```

**Kaydet.** (Memory'deki kural: `.env`'i SFTP ile push etme — manuel düzenle.)

### 2.4 Cache temizle

Yönetim aracında:

5. **🧹 Cache → "⚡ Tümünü Temizle"** — `.env` değişikliğinin uygulanması için kritik.

### 2.5 Test et

6. **"Durumu Kontrol Et"** — şimdi her şey ✓ olmalı:
   - WEBPUSH_VAPID_PUBLIC ✓
   - WEBPUSH_VAPID_PRIVATE ✓
   - WEBPUSH_VAPID_SUBJECT ✓
   - push_subscriptions tablosu ✓
   - minishlink/web-push paketi ✓

### 2.6 Yönetim aracını SİL

7. SFTP istemcinden `public/yonet.php` dosyasını **sil**. (Güvenlik açığı oluşmasın.)

---

## 3. TARAYICIDA DOĞRULAMA

1. Siteye gir (HTTPS olmalı — Service Worker HTTP'de çalışmaz)
2. Çan ikonuna tıkla → "Etkinleştir" → İzin ver
3. Browser console (F12 → Console) → şu satırları gör:
   - Service Worker registered
   - Push subscription oluşturuldu (network'te `/push/subscribe` POST 200)
4. **Browser'ı tamamen kapat** (sadece sekmeyi değil)
5. Başka bir kullanıcıdan sana görev / proje / randevu atatın
6. İşletim sistemi seviyesinde **bildirim pop-up** çıkmalı (browser kapalı olsa bile)

---

## 4. SORUN GİDERME

| Belirti | Çözüm |
|---|---|
| `composer install` hata veriyor | PHP 8.3+ gerekli. `php -v` ile kontrol et. |
| Yönetim aracı 403 | Token yanlış. `.env`'deki APP_KEY'in son 16 karakteri. |
| migrate çalıştı ama tablo yok | DB connection sorunu — Sistem Özeti'ne bak. |
| VAPID üret çalışmıyor | `vendor/` klasörü yüklenmemiş veya `minishlink/web-push` yok. Adım 1.2'ye dön. |
| Push bildirimi gelmiyor | Browser HTTPS'de mi? Service Worker register edildi mi? (DevTools → Application → Service Workers) |
| Console'da "sw.js 404" | `public/sw.js` sunucuda doğru yere yüklenmemiş. |
| .env'de VAPID anahtarları var ama çalışmıyor | Cache temizle! `config:clear` + `opcache-reset` gerekli. |

---

## 5. NOTLAR

- Web Push **sadece HTTPS** üzerinde çalışır. HTTP'de tarayıcı Service Worker register etmez.
- `vendor/` klasörü deploy edildikten sonra bir daha güncel paket kurulum gerekmez (paketleri değiştirmediğin sürece).
- Eski Pusher altyapısı **kaldırılmadı**; Pusher canlı (sayfa açık) bildirimler için kullanılır, Web Push browser kapalıyken devreye girer. İkisi paralel çalışır, çakışmazlar (tag aynı).
