This commit is contained in:
Bulut Kuru
2026-03-27 21:06:38 +03:00
parent f6c815ee88
commit f46b9d795d
285 changed files with 47574 additions and 90 deletions

254
prompts/settings-seeder.md Normal file
View File

@@ -0,0 +1,254 @@
# Laravel Settings Seeder — Admin Panel Ayarları
`settings` tablosundaki mevcut seeder'ı tamamen yeniden yaz. Admin panel 9 grup ve toplam 105 ayar bekliyor. Her ayarın `group`, `key`, `type`, `label`, `order_index` ve `is_public` alanları olmalı.
---
## Tablo Yapısı
```
settings: id, group, key, value, type, label, order_index, is_public, created_at, updated_at
```
## Migration Güncelleme
Mevcut `settings` tablosunda `label` ve `order_index` yoksa migration ekle:
```
label — string, nullable
order_index — integer, default 0
```
---
## Kurallar
- `key` benzersiz (unique) olmalı
- `value` başlangıçta boş string veya makul varsayılan değer
- `order_index` her grup içinde 0'dan başlar, grup içi sıralamayı belirler
- `is_public` — public API'den (`GET /api/v1/settings`) görünmesi gerekmeyen hassas veriler `false`
- Seeder `updateOrCreate` ile çalışsın (`key` bazlı) — tekrar çalışınca mevcut value'ları silmesin, sadece label/type/group/order_index güncellensin
- `type` değerleri: `text`, `textarea`, `image`, `boolean`, `url`, `color`, `richtext`, `json`
---
## Tüm Ayarlar (9 grup, 105 alan)
### general — Genel (13 alan)
| order | key | type | label | is_public | value (varsayılan) |
|-------|-----|------|-------|-----------|-------------------|
| 0 | site_name | text | Site Adı | true | Boğaziçi Denizcilik Eğitim Kurumu |
| 1 | site_tagline | text | Slogan | true | |
| 2 | site_description | textarea | Kısa Site Açıklaması | true | |
| 3 | logo_light | image | Logo — Açık Tema (beyaz navbar) | true | |
| 4 | logo_dark | image | Logo — Koyu Tema (dark bg) | true | |
| 5 | favicon | image | Favicon (32x32 PNG) | true | |
| 6 | apple_touch_icon | image | Apple Touch Icon (180x180) | true | |
| 7 | announcement_bar_active | boolean | Üst Bar Aktif mi | true | false |
| 8 | announcement_bar_text | text | Üst Bar Metni | true | |
| 9 | announcement_bar_url | url | Üst Bar Linki | true | |
| 10 | announcement_bar_bg_color | color | Üst Bar Arka Plan Rengi | true | #1a3e74 |
| 11 | maintenance_mode | boolean | Bakım Modu | true | false |
| 12 | maintenance_message | textarea | Bakım Modu Mesajı | true | |
### contact — İletişim (15 alan)
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | phone_primary | text | Ana Telefon | true | |
| 1 | phone_secondary | text | İkinci Telefon | true | |
| 2 | email_info | text | Bilgi E-postası | true | |
| 3 | email_support | text | Destek E-postası | true | |
| 4 | email_kayit | text | Kayıt E-postası | true | |
| 5 | address_full | textarea | Tam Adres | true | |
| 6 | address_short | text | Kısa Adres (navbar için) | true | |
| 7 | district | text | İlçe | true | |
| 8 | city | text | Şehir | true | |
| 9 | postal_code | text | Posta Kodu | true | |
| 10 | working_hours_weekday | text | Hafta İçi Saatleri | true | |
| 11 | working_hours_saturday | text | Cumartesi Saatleri | true | |
| 12 | working_hours_sunday | text | Pazar Saatleri | true | |
| 13 | whatsapp_number | text | WhatsApp Numarası (+90 ile) | true | |
| 14 | whatsapp_message | text | WhatsApp Varsayılan Mesaj | true | |
### maps — Harita (6 alan)
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | google_maps_embed_url | textarea | Google Maps Embed URL (iframe src) | true | |
| 1 | google_maps_place_url | url | Google Maps Profil Linki | true | |
| 2 | google_maps_api_key | text | Google Maps API Key | false | |
| 3 | latitude | text | Enlem | true | |
| 4 | longitude | text | Boylam | true | |
| 5 | map_zoom_level | text | Harita Zoom (1-20) | true | 15 |
### social — Sosyal Medya (11 alan)
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | instagram_url | url | Instagram Profil URL | true | |
| 1 | instagram_handle | text | Instagram Kullanıcı Adı (@siz) | true | |
| 2 | facebook_url | url | Facebook Sayfası URL | true | |
| 3 | facebook_page_id | text | Facebook Page ID | false | |
| 4 | twitter_url | url | X (Twitter) Profil URL | true | |
| 5 | twitter_handle | text | X Kullanıcı Adı (@siz) | true | |
| 6 | youtube_url | url | YouTube Kanal URL | true | |
| 7 | youtube_channel_id | text | YouTube Channel ID | false | |
| 8 | linkedin_url | url | LinkedIn Sayfa URL | true | |
| 9 | tiktok_url | url | TikTok Profil URL | true | |
| 10 | pinterest_url | url | Pinterest URL | true | |
### seo — SEO (23 alan)
**Temel SEO:**
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | meta_title_suffix | text | Title Eki | true | Boğaziçi Denizcilik |
| 1 | meta_title_separator | text | Ayraç Karakteri | true | \| |
| 2 | default_meta_description | textarea | Varsayılan Meta Açıklama | true | |
| 3 | default_meta_keywords | textarea | Varsayılan Keywords (virgülle) | true | |
| 4 | robots | text | Robots | true | index, follow |
| 5 | canonical_domain | url | Canonical Domain | true | |
**Open Graph:**
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 6 | og_title | text | OG Default Title | true | |
| 7 | og_description | textarea | OG Default Description | true | |
| 8 | og_image | image | OG Default Görsel (1200x630 px) | true | |
| 9 | og_type | text | OG Type | true | website |
| 10 | og_locale | text | OG Locale | true | tr_TR |
| 11 | og_site_name | text | OG Site Name | true | |
| 12 | facebook_app_id | text | Facebook App ID | false | |
**Twitter / X Card:**
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 13 | twitter_card_type | text | Card Tipi | true | summary_large_image |
| 14 | twitter_site | text | Site @handle | true | |
| 15 | twitter_creator | text | İçerik Sahibi @handle | true | |
| 16 | twitter_title | text | Twitter Default Title | true | |
| 17 | twitter_description | textarea | Twitter Default Description | true | |
| 18 | twitter_image | image | Twitter Card Görseli (1200x600 px) | true | |
**Doğrulama Kodları:**
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 19 | google_site_verification | text | Google Search Console Kodu | true | |
| 20 | bing_site_verification | text | Bing Webmaster Kodu | true | |
| 21 | yandex_verification | text | Yandex Webmaster Kodu | true | |
| 22 | pinterest_verification | text | Pinterest Doğrulama Kodu | true | |
### analytics — Analitik (10 alan)
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | google_analytics_id | text | Google Analytics 4 ID (G-XXXXXXXX) | false | |
| 1 | google_tag_manager_id | text | Google Tag Manager ID (GTM-XXXXXXX) | false | |
| 2 | google_ads_id | text | Google Ads Conversion ID | false | |
| 3 | facebook_pixel_id | text | Meta (Facebook) Pixel ID | false | |
| 4 | hotjar_id | text | Hotjar Site ID | false | |
| 5 | clarity_id | text | Microsoft Clarity ID | false | |
| 6 | tiktok_pixel_id | text | TikTok Pixel ID | false | |
| 7 | crisp_website_id | text | Crisp Chat Website ID | false | |
| 8 | custom_head_scripts | textarea | `<head>` içine özel script | false | |
| 9 | custom_body_scripts | textarea | `<body>` sonuna özel script | false | |
### header — Header (9 alan)
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | navbar_style_default | text | Varsayılan Navbar Stili (transparent/white) | true | transparent |
| 1 | cta_button_text | text | Sağ Üst Buton Metni | true | Başvuru Yap |
| 2 | cta_button_url | url | Sağ Üst Buton Linki | true | /kayit |
| 3 | cta_button_color | color | Sağ Üst Buton Rengi | true | #1a3e74 |
| 4 | show_phone_topbar | boolean | Üst Bar'da Telefon Göster | true | true |
| 5 | show_email_topbar | boolean | Üst Bar'da E-posta Göster | true | true |
| 6 | show_address_topbar | boolean | Üst Bar'da Adres Göster | true | true |
| 7 | show_hours_topbar | boolean | Üst Bar'da Saat Göster | true | true |
| 8 | show_social_navbar | boolean | Navbar'da Sosyal Medya İkonları Göster | true | true |
### footer — Footer (8 alan)
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | footer_description | textarea | Footer Açıklaması | true | |
| 1 | footer_logo | image | Footer Logo (varsa ayrı) | true | |
| 2 | copyright_text | text | Copyright Metni | true | © 2026 Boğaziçi Denizcilik |
| 3 | footer_address | textarea | Footer Adres | true | |
| 4 | footer_phone | text | Footer Telefon | true | |
| 5 | footer_email | text | Footer E-posta | true | |
| 6 | footer_bg_color | color | Footer Arka Plan Rengi | true | #0f2847 |
| 7 | show_social_footer | boolean | Footer'da Sosyal Medya Göster | true | true |
### integrations — Entegrasyonlar (10 alan)
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | recaptcha_site_key | text | reCAPTCHA v3 Site Key | false | |
| 1 | recaptcha_secret_key | text | reCAPTCHA v3 Secret Key | false | |
| 2 | smtp_host | text | SMTP Host | false | |
| 3 | smtp_port | text | SMTP Port | false | 587 |
| 4 | smtp_username | text | SMTP Kullanıcı Adı | false | |
| 5 | smtp_password | text | SMTP Şifre | false | |
| 6 | smtp_encryption | text | SMTP Şifreleme (tls/ssl) | false | tls |
| 7 | smtp_from_name | text | Mail Gönderen Adı | false | |
| 8 | smtp_from_email | text | Mail Gönderen Adresi | false | |
| 9 | notification_emails | textarea | Bildirim E-postaları (virgülle) | false | |
---
## is_public Özet Tablosu
| Grup | Tümü public? | Gizli olanlar |
|------|-------------|---------------|
| general | Evet | — |
| contact | Evet | — |
| maps | Hayır | `google_maps_api_key` |
| social | Hayır | `facebook_page_id`, `youtube_channel_id` |
| seo | Hayır | `facebook_app_id` |
| analytics | Tümü gizli | Hepsi `is_public: false` |
| header | Evet | — |
| footer | Evet | — |
| integrations | Tümü gizli | Hepsi `is_public: false` |
| info_sections | Evet | — |
---
### info_sections — Tanıtım Bölümleri (10 alan)
**Bölüm 1:**
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 0 | info_section_1_badge | text | Bölüm 1 — Etiket | true | |
| 1 | info_section_1_title | text | Bölüm 1 — Başlık | true | |
| 2 | info_section_1_body | textarea | Bölüm 1 — İçerik | true | |
| 3 | info_section_1_quote | text | Bölüm 1 — Alıntı | true | |
| 4 | info_section_1_quote_author | text | Bölüm 1 — Alıntı Yazarı | true | |
| 5 | info_section_1_image | image | Bölüm 1 — Görsel | true | |
**Bölüm 2:**
| order | key | type | label | is_public | value |
|-------|-----|------|-------|-----------|-------|
| 6 | info_section_2_badge | text | Bölüm 2 — Etiket | true | |
| 7 | info_section_2_title | text | Bölüm 2 — Başlık | true | |
| 8 | info_section_2_body | textarea | Bölüm 2 — İçerik | true | |
| 9 | info_section_2_image | image | Bölüm 2 — Görsel | true | |
---
## Önemli Notlar
- `updateOrCreate` kullan, `key` bazlı — seeder tekrar çalıştığında adminin girdiği value'lar korunsun
- `updateOrCreate`'de sadece şu alanları güncelle: `group`, `type`, `label`, `order_index`, `is_public`
- `value` alanını sadece kayıt yeni oluşturuluyorsa set et (mevcut veriyi ezme)
- Public API (`GET /api/v1/settings`) sadece `is_public: true` olanları döndürmeli
- Admin API (`GET /api/admin/settings`) tüm ayarları döndürmeli
- Toplam: 10 grup, 115 ayar satırı