<p><strong><code>PollPolicy</code></strong> <strong><code>AppServiceProvider</code></strong> içinde kaydedilmiştir.</p>
<hr/>
<h2>
<a name="validation-deserves-respect" href="#validation-deserves-respect"></a>
Doğrulama saygıyı hak eder ✅
</h2>
<p>Kurallar, <strong><code>FormRequest</code></strong> sınıflarında yer almalıdır, böylece kontrolcüler okunabilir kalır ve geri bildirimler, prod loglarında değil de PHPUnit'te acı verir 🌱</p>
<p><strong>Form Requests</strong> üzerinde çevrimiçi doğrulamayı tercih edin—bu ağaçta, oylama <strong><code>VoteRequest</code></strong> kullanırken; yönetici oluşturma/güncelleme <strong><code>StorePollRequest</code></strong> / <strong><code>UpdatePollRequest</code></strong> kullanır.</p>
<p>Bir yönetici mevcut seçenek etiketini değiştirdiğinde, <strong><code>PollApiController::update</code></strong> yalnızca bu seçeneğe bağlı <strong>oyları</strong> yumuşak bir şekilde siler (bkz. <strong><code>Vote::query()->where(...)->where('poll_option_id', $existing->id)</code></strong>), böylece toplamlar doğru kalır; dokunulmamış seçeneklerin oyları kalır <a href="https://app/Http/Controllers/Polls/Admin/PollApiController.php"><code>app/Http/Controllers/Polls/Admin/PollApiController.php</code></a>.</p>
<p>Ürün kuralı: anketleri müze sergileri gibi dondurun <strong>ya da</strong> temizlik hikayesini üstlenin—yüzer politikalar, PM'leri Slack'te rahatsız etmekten başka bir şey değildir 😐</p>
<hr/>
<h2>
<a name="index-the-queries-that-actually-run" href="#index-the-queries-that-actually-run"></a>
Gerçekten çalışan sorguları dizinleyin 📚
</h2>
<p>Eğer migrasyonlarınız sadece atmosferde kalıyorsa, MySQL tam taramalar için kahve parası harcar—niyetle dizin oluşturun, kehanetle değil 👌</p>
<p>Yapı <strong><code>votes</code></strong>, <strong><code>unique(['poll_id', 'guest_id'])</code></strong> ile ek indeks ekler; bu indeks, her oyda sıkça kullandığınız arama desenlerini içerir. Yabancı anahtar sütunları (<code>poll_id</code>, <code>poll_option_id</code>, <code>guest_id</code>) birleşimler ve silmeler için InnoDB dizinleme özelliklerinden faydalanır. <strong><code>polls.slug</code></strong> ise, <a href="https://database/migrations/2026_04_13_102438_create_polls_table.php"><code>database/migrations/2026_04_13_102438_create_polls_table.php</code></a> içinde <strong>benzersiz</strong>'dir—bu, <strong><code>Route::get('/polls/{poll:slug}', ...</code></strong> ve insani URL'ler için güzeldir.</p>
<p>Her yere kompozit dizinler serpmekten önce <code>EXPLAIN</code> ile öncelikler belirleyin.</p>
<hr/>
<h2>
<a name="plan-for-traffic-spikes-honestly" href="#plan-for-traffic-spikes-honestly"></a>
Trafik patlamaları için gerçekten plan yapın 📈
</h2>
<p>Eğer ölçekleme planınız <strong>“horizon scales, bro”</strong> ile bitiyorsa, geleceğin kendinize bir özür borcu var 🔍 Laravel, <strong><code>1M votes</code></strong> ile küçük bir hostla nazikçe müzakere etmeyecek—en zayıf katmanı adlandırın.</p>
<p>Geleceğe bırakmadan önce, dağıtım için ilk neyin vurduğunu sorun: ilişkisel yazma verimliliği (<code>votes</code> + <strong><code>poll_options.votes_count</code></strong>), <strong><code>Cache::lock</code></strong> iş yoğunluğu, <strong>Pusher / yayınlama kotaları</strong>, <strong><code>ShouldBroadcastNow</code></strong> PHP parmaklarınızı uzatırken, ucuz CPU—cevaplar <strong><code>artisan</code>/yük testleri</strong> ile gelmelidir, kehanetle değil.</p>
<p><strong>Çok kiracılı SaaS</strong> (burada modelleme yoktur), paralel bir tasarım olarak kalır: kiracı sütunu ile şeması veya DB başına kiracı, uyumluluk ve işlemler açısından bir ticaret değişimini içerir.</p>
<hr/>
<h2>
<a name="test-the-whole-flow-not-just-the-happy-screenshot" href="#test-the-whole-flow-not-just-the-happy-screenshot"></a>
Süreçte sadece hoş ekran görüntüsünden ziyade, toplam akışı test edin 🧪
</h2>
<p>Yeşil CI güzeldir; iki tarayıcıyla sinirli QA farklıdır <a href="https://tests/Feature/PollVotingTest.php"><code>tests/Feature/PollVotingTest.php</code></a> ruh halleri—ikili olasılıkları, yayınları, <strong><code>Guest</code></strong> kimliği, <strong><code>CastPollVoteAction</code></strong> kenar durumları gibi konuları kapsar ve yayınlanan güncellemelerin etkilendiği durumlar, CSRF/oturum karmaşıklıkları vs. Geri bildirim kısıtlamalarını sıktıkça bu durumu uzatın ve geri dönüşlerin önce <strong><code>phpunit</code></strong>’te yaralanmasına sebep olun 🙏</p>
<hr/>
<h2>
<a name="build-trust-with-plain-decisions" href="#build-trust-with-plain-decisions"></a>
Basit kararlarla güven inşa edin ❤️
</h2>
<p>Not defteri şeması 🎯</p>
<ul>
<li>
<strong><code>polls.vote</code></strong; her dönem dürüst kalır:</strong> hız sınırlayıcı 🛡️, önbellek kilidi 🔒, işlem 🧾, benzersiz DB kısıtlaması, sıkıcı HTTP durumları <a href="https://app/Http/Controllers/Polls/PublicPollController.php"><code>PublicPollController</code></a> · <a href="https://app/Actions/Polls/CastPollVoteAction.php"><code>CastPollVoteAction</code></a>.</li>
<li>
<strong>Besleme önbellekleri amacına hizmet eder:</strong> <strong><code>CachedPollIds</code></strong> + <strong><code>poll:{id}</code></strong> + <strong><code>PollObserver</code></strong> + cerrahi oy yamaları—<strong><code>FLUSH ALL</code> draması yok</strong> <a href="https://app/Support/CachedPollIds.php"><code>CachedPollIds</code></a> · <a href="https://app/Observers/PollObserver.php"><code>PollObserver</code></a>.</li>
<li>
<strong>Gerçeklik eşleşmeden yayın yapmayın:</strong> <strong><code>Show.vue</code></strong> ve <strong><code>Results.vue</code></strong> her ikisi de abonelik yapar—yöneticilerin de canlı barları hak ettiği ⚡️ <a href="https://app/Events/VoteCountUpdated.php"><code>VoteCountUpdated</code></a>.</li>
<li>
<strong>README, <code>.env</code> sırlarınızı bilir</strong> (Pusher/Vite)—gelecekteki siz teşekkür eder <a href="https://../README.md"><code>README.md</code></a>.</li>
</ul>
<p>Yoğun bir trafik hissi veren bir Laravel uygulaması nadiren bir dahi kısayolu ile elde edilir—bu, birikmiş olarak bir dizi sıkıcı güvenlik tedbiri gerektirir ve şakalarla yer değiştirilemez 😄 Paranoyayı gönderin <strong>ve</strong> gülünç olanları gönderin; kuyruk işçilerinizi HR şikayetinde bulunamaz 😉</p>