# Üst Manşet Haber Portalı - Demo İçerik Paket Kullanım Dokümantasyonu

Bu doküman, **Aşama 19 — Demo İçerik, Sunum Verisi ve Test Senaryoları** kapsamında sisteme eklenen idempotent demo içerik yönetimi, Artisan komutları, güvenlik kuralları, koruma mekanizmaları ve veri mimarisini açıklamaktadır.

---

## 1. Genel Mimari ve Komutlar

Sistemde demo içerik yönetimi 3 temel Artisan komutu üzerinden yürütülür:

### 1.1 `php artisan demo:status`
- **Amacı**: Demo paketinin kurulum durumunu, kayıt sayılarını, ortam izinlerini, kullanıcı doğrulamalarını, fixture koruma kapsamını ve medya manifest varlığını read-only olarak raporlar.
- **Güvenlik**: Veritabanına veya ortama hiçbir müdahalede bulunmaz. Additive migration henüz uygulanmamışsa veya demo batch yoksa hata fırlatmaz.

### 1.2 `php artisan demo:install`
- **Amacı**: 12 Ana + 15 Alt Kategori (Toplam 27 Kategori), 25 etiket, 8 kurgusal yazar, 8 haber kaynağı, 25 yerel medya görseli, 72 gerçekçi Türkçe haber, manşet vitrin yerleşimleri, 10 reklam kampanyası ve 7 günlük saatlik okunma/reklam analitiği verisini kurar.
- **İdempotentlik**: Komut üst üste defalarca çalıştırılsa dahi kayıtları mükerrer çoğaltmaz (`is_demo = true` ve `demo_batch_id = 'national-news-v1'`).
- **Domain Event & Suppress Güvenliği**: Domain event'leri, observer'ları, medya işleme ve cache güncellemelerini aktif tutar; yalnızca dışarı giden Mail (`Mail::fake()`) ve Bildirim (`Notification::fake()`) gönderimlerini suppress eder.

### 1.3 `php artisan demo:verify`
- **Amacı**: Demo verilerinin ilişkisel bütünlüğünü, variant karşılıklarını, yetim kayıt olmadığını, 7 günlük analitik tutarlılığını, manifest hash uyumunu ve kuyruk güvenliğini read-only olarak doğrular.

---

## 2. Kategori ve Kullanıcı Doğrulama Standartları

- **Kategori Yapısı**: Sistemde toplam 27 kategori bulunmaktadır (12 önceden var olan ana kategori + 15 demo ile eklenen alt kategori).
- **Kullanıcı Doğrulaması**:
  - Toplam Demo Kullanıcı: 9 (Editor, Reporter, Advertising Manager rollerinde)
  - Demo Super Administrator: 0 (Hiçbir koşulda demo Super Admin oluşturulmaz)
  - Gerçek Kullanıcı Değişikliği: 0 (Mevcut Süper Yöneticiler ve üretim kullanıcıları 100% korunur)

---

## 3. Fixture Koruma Mekanizmaları (Hash & Key Guard)

- **İçerik Hash Koruması (Hash Guard)**: `Article` modelinde uygulanır. `title` ve `summary` alanlarından üretilen SHA-256 hash'i ile yöneticinin yaptığı değişiklikler tespit edilir; düzenlenmiş demo haberlerin üzerine yazılmaz.
- **Benzersiz Anahtar Koruması (Key Guard)**: `Category`, `Tag`, `Author`, `Source`, `CorporatePage`, `AdCampaign` modellerinde uygulanır. Mevcut benzersiz kayıtlar atlanır, tekrarlanan veri oluşturulmaz.
- **İlişkisel Demo Tespiti (No Redundant Columns)**: `ContentPlacement` ve `AdCreative` tablolarına gereksiz `is_demo` sütunları eklenmemiş; demo durumları üst modelleri üzerinden (`ContentPlacement::whereHas('article', fn($q) => $q->where('is_demo', true))` ve `AdCreative::whereHas('campaign', fn($q) => $q->where('is_demo', true))`) dinamik ve güvenli biçimde tespit edilir.

---

## 4. Güvenlik ve Ortam Kuralları (Environment Guards)

- **Production Koruması**: Production ortamında `demo:install` komutunun çalışabilmesi için `.env` dosyasında `DEMO_CONTENT_ENABLED=true` tanımlanmış olmalıdır. Yalnızca `--force` bayrağı kullanımı Production korumasını baypas edemez.
- **Şifre Güvenliği**: Demo kullanıcıların şifresi `config('demo.default_password')` üzerinden `DEMO_DEFAULT_PASSWORD` env değişkeninden okunur. Şifre tanımsızsa kurulum güvenle durdurulur.
- **Yayıncı Ayarları Koruması**: `demo:install` komutu mevcut `PublicationSetting` kayıtlarını değiştirmez.

---

## 5. Yapay Zekâ (AI) Gelecek Hazırlık Analizi

Aşama 19 kapsamında veritabanına AI sütunu veya bağımlılığı eklenmemiştir. İleriki aşamalarda eklenebilecek AI destekli haber üretimi için önerilen veri mimarisi şöyledir (örnek isimlerdir):

- `source_origin`: `human`, `ai_generated`, `ai_assisted` (örnektir)
- `ai_provider`: `openai`, `anthropic`, `google` (mimari örnektir)
- `ai_model`: `gpt-4o`, `claude-3-5-sonnet`, `gemini-1.5-pro` (mimari örnektir)
- `prompt_version`: `v1.2`
- `generation_id`: `gen_uuid`
- `generated_at`: Timestamp
- `human_reviewed_at`: Timestamp
- `fact_check_status`: `pending`, `verified`, `rejected`
- `disclosure_status`: `not_required`, `pending`, `disclosed`

*İlke*: Yapay zekâ tarafından üretilen tüm haberler varsayılan olarak `draft` veya `in_review` statüsünde sisteme girmeli, insan editoryal onayından geçmeden `published` statüsüne geçirilmemelidir.
