Użytkownik z jakiegoś powodu nie odebrał response'u i klika przycisk jeszcze raz. Co wtedy? Nowe ID jest generowane i kolejny zakład postawiony.
Jeśli odpowiedź z serwera nie została odebrana/poprawnie przetworzona to aplikacja kliencka powinna założyć że request się nie powiódł i kiedy użytkownik spróbuje utworzyć zakład jeszcze raz, z tymi samymi danymi to właśnie aplikacja nie powinna wygenerować nowego ID tylko wysłać wszystko to samo.
Ewentualnie jeśli masz taką możliwość to zbuduj ID zakładu składający się z kilku elementów, np. ID użytkownika i ID podmiotu zakładu. Wtedy będziesz wiedział że dany użytkownik wysłał już zakład odnośnie konkretnej rzeczy.
Ale to też zależy od wymagań biznesowych. Należy zadać pytanie co jest większym problemem- nie utworzenie zakładu w ogóle mimo że użytkownik może myśleć że zakład został utworzony, czy też ewentualne zduplikowanie zakładu? I na tej postawie próbować znaleźć rozwiązanie.
Jeśli użytkownik nie chciał wysyłać dwóch zakładów tylko jeden, a kolejny raz kliknął, bo nie otrzymał informacji o tym, ze zakład został wysłany to jest problem.
Tak, ale przede wszystkim jest to problem do obsłużenia po stronie klienta, w UI.
Ogólnie to Twój problem jest dosyć klasyczny, ale błędnie zakłada że należy znaleźć 100% bezpieczne rozwiązane. A takie rozwiązanie raczej nie istnieje. W prawdziwych aplikacjach biznesowych zawsze trzeba się liczyć z ewentualnym błędem, i to od biznesu zależy wybranie mniejszego zła. Czysto hipotecznie, powiedzmy że mamy sytuację że ten sam zakład zostaje utworzony dwa razy (czyli odwrotność tego do czego zaproponowałem rozwiązanie wcześniej). Biznes może stwierdzić że jest to oczywiście nie pożądane, ale w takiej sytuacji użytkownik dostanie maila z przeprosinami i zniżkę, a duplikat zostanie usunięty.
Innymi słowy wydaje mi się że próbujesz podejść do problemu czysto technicznie, tam gdzie trzeba patrzyć z szerszej perspektywy.