Członkowie i członkowie zespołu, jedna transakcja na rekord

FeatureSecurityService
Szycy
29 sierpnia 2026 20:16 UTC
Autor
Kamo
Pochęt się
0e87cad

Dwa ekrany dodane mają masę muszą utworzyć arkusz kalkulacyjny osób w jednym zgłoszeniowo I zgłoś się indywidualnie. Nie można tego zbudować na istniejącym Punkty końcowe, więc rurociąg tworzenia wysuwa się z kontrolera. MemberCreationService jest teraz właścicielem, oznaczonym REQUIRES_NEW. Każdy zapis w ten sposób commits lub cofa się samodzielnie, co jest całym założeniem ekranu: a Awaria w rekordowym 7 pozostawia 1-6 utworzone i tylko rzędy, które nie powiodły się, pozostają na Strona do poprawienia. Gdyby pętla pozostała w kontrolerze, pełnomocnik Springa by Nie widzieli wezwania (samopowołanie), każdy rekord dzieliłby się jednym z nich. Transakcja, a pierwsza złapana awaria oznaczałaby ją tylko cofając i Odrzucił członków, którzy już odnieśli sukces w czasie zaangażowania. MemberBulkCreator uruchamia partię i celowo NIE jest transakcyjny dla Ten sam powód - transakcja na zewnątrz zostałaby zatruta dokładnie przez wyjątki. Istnieje, aby się wchłonąć. Odrzuca również wiadomość e-mail lub nazwę użytkownika powtarzaną w jednym. Zgłoszenie, które w przeciwnym razie pojawiłoby się jako „już członek” i wysłałoby administratora Szukając członka, ta sama prośba stworzyła sekundę wcześniej, i to Ponownie zwalnia te roszczenia, gdy rząd zawiedzie z innego powodu. Oba pojedyncze punkty końcowe przekazują teraz tę samą usługę, więc ścieżka masowa Prowadzą identyczną sekwencję: ponownie użyć użytkownika pasującego do osobistej wiadomości e-mail (wwrażliwe na przypadek, najstarsze wygrane), odrzuć duplikat członkostwa z 409, poprzez MemberService, lustro w kierunku zapewnienia bezpieczeństwaOrg, zrematerializuje prawa, Następnie wyślij weryfikację i e-maile. Dwie inne zmiany wypadają z tego: MemberUsernameGenerator wypełnia pustą nazwę użytkownika, w zamówieniu produkt - najpierw. łej, f.last, najpierw.l, first.m.last, potem te same cztery ponumerowane. To Składa akcenty, szanuje 20-znakową kolumnę, nigdy nie kończy się na separatorze i Nigdy nie mituje zarezerwowanego uchwytu. Dostępność jest badana globalnie, ponieważ logowanie Ustanawia LOWER(u.username) na całym stole, zanim spojrzy na dowolny org. UsernameAvailabilityRepository jest SecurityService-local, więc ten statek bez Wersja współdzielona bibliotekeria; współdzielony finder jest dokładnym przypadkiem i rzuca wprost Raz zderzą się dwa rzędy. rękoidlowna nazwa użytkownika, która zderza się tylko w każdym przypadku, jest teraz odrzucana, a nie Tworzenie drugiego użytkownika. Ta para jest nie do odzyskania: oba konta stają się I niejednoznaczne w formularzu logowania i znajdź ByUsername rzuty dla każdego z nich Potem. Jednona rekordowy formularz zawsze wysyła nazwę użytkownika, którą już ma Waleć, więc nic się nie cofa. Uczy się ekstraktuOrgId, który jest ekstrahemUserId's Rodzeństwo i zaginęło tylko dlatego, że dwa kontrolery używające go poprzedzają Wzorzec. Cztery wpisy bazowe idą z nim.

Wszystkie zmiany

Jak to, co widzisz żeglugę?

Każda z tych aktualizacji automatycznie ląduje w miejscu pracy. Zacznij za darmo i obserwuj, jak rośnie tydzień po tygodniu.

Start Free ForeverZobacz ceny