Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhaba arkadaşlar. Aşağıda açıklayacağım konuda aklıma takılan bir nokta var. Bu konuda başka insanlar nasıl yol izliyor merak ediyorum.

Belirli bir işi olan bir kod bloğu yapıyoruz diyelim. Bu kod: kullanıcıdan aldığı veriyi veritabanına yazıyor. Her bir kullanıcı birbirinden farklı veri göndermek zorunda.
Otobüs bileti alıyor gibi düşünebilirsiniz. Bir koltuğu birisi seçip, kaydet dediği anda, seçtiği koltuk seçilemez olarak işaretleniyor. Bu işlem tamamlanmadan bir başka kullanıcı da aynı koltuğu seçmiş olup kaydet düğmesine basmış olabilir. Bu durumda kimin isteği sunucuya ilk ulaşırsa o kullanıcının isteği işlenir, yetişemeyene de artık bu koltuk seçilemez diye uyarı verir.

Bu tarz işlemler için, sizler nasıl bir yol izlerdiniz yada izlediniz. Laravel ya da php ile bu konuları nasıl çözüyorsunuz.

İyi çalışmalar dilerim.

    MehmetCanYUMUTUTAN Ne yazık ki bazı durumlarda aynı anda istek gelebildiği için race condition dediğimiz sıkıntı olabilir. Bu gibi yerlerde updateOrCreate() kullanıyorsa yerine upsert() kullanılmalı:
    https://laravel.com/docs/8.x/queries#upserts

    Aynı kayıt üzerinde sadece ilk gelenin işlem yapması ve diğerinin veritabanı düzeyinde engellenmesi için de pessimistic locking kullanılabilir:
    https://laravel.com/docs/8.x/queries#pessimistic-locking

    Art arda yapılan insert, update ve delete sorgularında ise mutlaka transaction kullanılmalı:
    https://laravel.com/docs/8.x/database#database-transactions

    Son olarak işlemler kuyruk işlemleri şeklinde aynı kuyruğa verilirlerse seri çalışacakları için birbirlerini etkilemeyeceklerinden dolayı (Job içinde bunların kontrolü yapıldığı taktirde) bu da bir çözüm ama bu işlemlerin sonuçları anlık isteniyorsa socket vs kullanılması gerekecektir.

    Frontend tarafında ise broadcasting ile işlem yapılan sayfa/bölüm presence channel'a çevrilerek kullanıcıların yaptıkları işlemlerin birbirlerine yansıtılmasıyla henüz backende girmeden de (backend önlemleri mutlaka alınacak tabi ki) bazı şeyler engellenebilir, örneğin bir kullanıcı bir koltuğu seçtiğinden anlık diğer kullanıcılara disabled olarak gösterilebilir, aynı sayfada işlem yapan kullanıcılar arasında böyle bir etkileşim sağlanabilir.

    Bunların kombinasyonları ile olası sorunlara engel olabilirsiniz. Elbette anlatması kolay ama uygulamasının kolay olmayacağı aşikar.

      mgsmus Cevabınız için teşekkür ederim. Kompleks bir yapı ortaya çıkıyor. Bana araştırıp deneyecek anahtar kelimeler çıktı sayenizde.