# V1 Paket Manifesti (Package Manifest)

Bu doküman, E-Ticaret Sistemi V1 sürümünün canlı sunucu kurulumlarına veya müşterilere teslim edilmek üzere paketlenmesi sırasında hangi dosyaların pakete dahil edileceğini ve hangilerinin kesinlikle dışarıda bırakılacağını (exclude) belirler.

---

## 1. V1 Paket Amacı
Bu paketlemenin amacı, e-ticaret sistemini ilk kurulum adımları (Installer) ve lisans doğrulama yapısı etkin bir şekilde son kullanıcı sunucularına kurulabilir hale getirmektir. Paket, gereksiz yer kaplayan geliştirme araçları, local konfigürasyonlar, geçici test verileri ve güvenlik riski oluşturabilecek hassas dosyalardan tamamen arındırılmış olmalıdır.

---

## 2. Paket Tipleri

### Yöntem A: SSH/Composer Destekli Sunucu Paketi
Müşterinin veya kurulum ekibinin hedef sunucuda SSH erişimine ve Composer paket yöneticisine sahip olduğu durumlarda tercih edilir.
* **Özellik:** `vendor/` klasörü pakete dahil edilmez.
* **Kurulum:** Dosyalar sunucuya yüklendikten sonra sunucu üzerinde `composer install --no-dev --optimize-autoloader` komutu çalıştırılır.
* **Avantaj:** Paket boyutu son derece küçüktür (ortalama 5-10 MB) ve transferi hızlıdır.

### Yöntem B: Paylaşımlı Hosting / Hazır ZIP Paketi
SSH veya Composer desteği olmayan, paylaşımlı (shared) hosting altyapılarına doğrudan yüklenecek kurulumlar için tercih edilir.
* **Özellik:** `vendor/` klasörü pakete dahil edilir.
* **Hazırlık:** Paket oluşturulmadan önce lokal ortamda `composer install --no-dev --optimize-autoloader` çalıştırılarak geliştirici/test kütüphanelerinden arındırılmış bağımlılıklar üretilir.
* **Kurulum:** Hazırlanan ZIP paketi sunucuya yüklenip doğrudan arayüzden çıkarılır.

---

## 3. Pakete Dahil Edilecek Dosyalar
Canlı dağıtım paketinin çalışması için gerekli olan çekirdek dizinler ve dosyalar şunlardır:

* **`app/`**: Tüm iş mantığı, controller, middleware, service ve model dosyaları.
* **`bootstrap/`**: Laravel yükleme ve başlatma betikleri (`app.php`, vb.) ve otomatik yükleme dosyaları.
* **`config/`**: Uygulamanın tüm konfigürasyon dosyaları.
* **`database/`**: Veritabanı şemaları, migration'lar ve seeders. (Geliştirici test seeders hariç tutulabilir).
* **`public/`**: Web root dosyaları, `index.php`, resimler, css ve js varlıkları.
  * **`public/install.php`**: Kurulum öncesi PHP sürüm ve gereksinimlerini denetleyen installer ön kontrol betiği.
  * **`public/css/installer.css`**: Kurulum ekranının tasarım stilleri.
* **`resources/`**: Blade şablonları, dil dosyaları ve işlenmemiş asset'ler.
  * **`resources/views/installer/`**: Kurulum sihirbazının arayüz şablonları.
* **`routes/`**: Web, API, console ve channels yönlendirme tanımları.
* **`storage/`**: Gerekli klasör yapısı (alt klasörlerin boş dizin ağacı).
* **`docs/`**: Kurulum kılavuzları, sürüm notları ve API dokümantasyonları.
* **`composer.json`** & **`composer.lock`**: PHP bağımlılık tanımları.
* **`package.json`** & **`package-lock.json`** (Yalnızca Yöntem A ile sunucuda npm derlemesi yapılacaksa isteğe bağlı).
* **`vite.config.js`** (Yalnızca Yöntem A için isteğe bağlı).
* **`.env.example`**: Örnek konfigürasyon şablonu.
* **`.env.production.example`**: Canlı ortamlar için optimize edilmiş parametreleri barındıran örnek şablon.

---

## 4. Pakete Dahil Edilmeyecek Dosyalar (Zorunlu Exclude Listesi)
Canlı pakette yer alması güvenlik açığına, gereksiz şişmeye veya kuruluma engel durumlara yol açacak olan ve pakete kesinlikle eklenmeyecek dosyalar:

* **`.env`**: Lokal geliştirme ortamına ait hassas şifreler, API keyler ve veritabanı bilgileri asla pakete girmemelidir.
* **`storage/app/installed.lock`**: Bu kilit dosyası pakette bulunmamalıdır. Bulunursa müşteri sitesinde kurulum sihirbazı otomatik devreye giremez.
* **`lisans_sunucu/`**: Lokal lisans test sunucusu kodları tamamen lokal ortamda kalmalıdır, canlı dağıtım paketine eklenemez.
* **`.git/`** & **`.gitignore`**: Git versiyon kontrol dosyaları ve geçmişi paketten çıkarılmalıdır.
* **`node_modules/`**: Geliştirme aşamasında kullanılan Node.js paketleri canlı sunucuya aktarılmamalıdır.
* **`storage/logs/*`**: Lokal geliştirme log dosyaları (`laravel.log`, vb.) temizlenmelidir.
* **`storage/framework/cache/*`**: Lokal cache verileri temizlenmelidir.
* **`storage/framework/sessions/*`**: Lokal oturum dosyaları temizlenmelidir.
* **`storage/framework/views/*`**: Derlenmiş blade şablon önbellekleri temizlenmelidir.
* **`storage/app/backups/*`**: Lokal test yedekleme dosyaları silinmelidir.
* **Local yedek dosyaları**: Kök dizindeki tüm `.env.backup.*`, `*.zip`, `*.rar`, `*.bak` uzantılı yedek dosyaları temizlenmelidir.
* **Test/dummy yüklemeler**: `storage/app/public/` altındaki deneme amaçlı yüklenmiş ürün görselleri veya kullanıcı resimleri dışlanmalıdır.
* **IDE klasörleri**: `.vscode/`, `.idea/` gibi editör özel ayarları.
* **Test cache dosyaları**: `.phpunit.result.cache` vb. test koşturma kalıntıları.

---

## 5. Storage Paketleme Kuralları
* Canlı e-ticaret paketinde `storage/` klasörünün kendisi ve alt klasör hiyerarşisi (`app/`, `framework/`, `logs/`, `app/public/`) eksiksiz olarak bulunmalıdır.
* Ancak bu dizinlerin altındaki tüm geçici ve dinamik dosyalar silinmelidir.
* Her boş klasörün içinde Git veya paketleme sisteminin klasörü tanıması için sadece boş bir `.gitignore` veya `.gitkeep` dosyası bırakılmalıdır.

---

## 6. Public Build / Vite Asset Kuralları
* Sunucuda Node/NPM çalıştırma zorunluluğunu ortadan kaldırmak için, paketlemeden önce lokal ortamda `npm run build` komutu çalıştırılmalıdır.
* Derleme sonucu oluşan **`public/build`** klasörü ve altındaki CSS/JS asset'leri dağıtım paketine **mutlaka dahil edilmelidir**.
* Canlı sunucularda Vite derleme işlemi yapılmayacak, hazır derlenmiş asset'ler servis edilecektir.

---

## 7. Vendor Paketleme Kuralları
* **Yöntem A'da:** `vendor/` dizini zip dışında tutulur, sunucuda composer tetiklenir.
* **Yöntem B'de:** `vendor/` dizini pakete eklenir. Ancak eklenmeden önce lokalde `composer install --no-dev --optimize-autoloader` çalıştırılarak PHPUnit, Mockery ve diğer test araçlarının canlı koda sızması engellenir.

---

## 8. Installer Dosyaları Paketleme Kuralları
* Kurulum sihirbazının ön yüz denetçisi olan `public/install.php` dosyası, kurulum stil şablonu `public/css/installer.css` ve kurulum görünüm şablonları `resources/views/installer/` pakete eksiksiz olarak eklenmelidir.
* Bu dosyalar, kurulum başarılı olup `installed.lock` oluştuktan sonra sistem tarafından otomatik olarak kilitleneceği için pakette bulunmasında sakınca yoktur.

---

## 9. Lisans Sistemi Paketleme Kuralları
* E-ticaret lisans istemcisi kodları (`App\Services\LicenseService`, middleware ve ilgili yardımcı sınıflar) pakete eksiksiz dahil edilmelidir.
* Ancak, lokal testlerde kullanılan `lisans_sunucu/` klasörü kesinlikle paket dışı tutulacaktır.
* Lisans iletişiminde doğrulama amacıyla kullanılacak olan `.env` şablonundaki lisans endpointleri ve imza anahtarı gibi parametreler `.env.example` içinde placeholder (örnek temsilci) değerler olarak verilmelidir.

---

## 10. Güvenlik Notları
* Canlı ortam için hazırlanan `.env.production.example` şablonunda `APP_DEBUG=false` ve `APP_ENV=production` olarak ayarlanmalıdır.
* `LICENSE_RESPONSE_SECRET` değeri dokümanlarda veya şablonlarda asla gerçek üretim değeriyle verilmemeli, rastgele oluşturulması gerektiği not düşülmelidir.
* Kök dizinde yer alan geliştirme aşamasına ait zip/rar/tar paketleri veya veritabanı sql dökümleri sunucuya kesinlikle yüklenmemelidir.

---

## 11. Paket Oluşturmadan Önce Son Kontrol Listesi
1. [ ] Lokal `.env` dosyasının paket klasörünün dışında olduğundan emin olundu mu?
2. [ ] `storage/app/installed.lock` dosyasının paket içinde bulunmadığı doğrulandı mı?
3. [ ] `lisans_sunucu/` klasörü tamamen silindi veya dışlandı mı?
4. [ ] Lokal loglar (`storage/logs/*.log`) sıfırlandı mı?
5. [ ] `storage/framework/cache/data/` ve `sessions/` boşaltıldı mı?
6. [ ] `npm run build` çalıştırıldı ve `public/build` klasörünün pakete girdiği doğrulandı mı?
7. [ ] Geliştirici bağımlılıkları olmadan (`--no-dev`) ve optimize edilerek (`--optimize-autoloader`) Composer hazırlandı mı? (Yöntem B için)
8. [ ] `.env.example` içinde gerçek API keylerin veya şifrelerin kalmadığı teyit edildi mi?
