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.