- Verschifft
- 29. August 2026 um 20:16 UTC
- Autor
- Kamo
- Ausschuss
- 0e87cad
Die zwei Bulk-Add-Bildschirme müssen eine Tabelle der Menschen in einer Vorlage erstellen und über jeden einzelnen Bericht erstatten. Das konnte nicht auf dem bestehenden gebaut werden Endpunkte, so dass sich die Schöpfungspipeline aus dem Controller verlagert. MemberCreationService besitzt es jetzt, gekennzeichnet REQUIRES_NEW. Jeder Datensatz daher begeht oder rollt auf eigene Faust zurück, das ist die ganze Prämisse des Bildschirms: ein Ausfall bei Rekord 7 Blätter 1-6 erstellt, und nur die Reihen, die fehlgeschlagen bleiben auf der Seite zu korrigieren. Wäre die Schleife im Controller geblieben, würde Springs Stellvertreter haben nicht gesehen haben, den Anruf (Selbst-Berufung), jede Platte hätte eine geteilt Transaktion, und der erste gefangene Ausfall würde markiert haben es Rollback-only und verworfen die Mitglieder, die bereits zu Commit-Zeit gelungen war. MemberBulkCreator betreibt die Charge und ist absichtlich NICHT transaktional für die gleichen Grund -- eine äußere Transaktion würde durch genau die Ausnahmen vergiftet werden ist zu absorbieren. Es verweigert auch eine E-Mail oder Benutzername innerhalb einer Einreichung, die sonst als "bereits Mitglied" auftauchen und den Admin senden würde auf der Suche nach einem Mitglied dieser sehr Anfrage hatte eine zweite früher erstellt, und es Veröffentlichung dieser Ansprüche wieder, wenn eine Zeile aus einem anderen Grund fehlschlägt. Beide Single-Record-Endpunkte delegieren jetzt auf den gleichen Service, so dass die Bulk-Pfad läuft eine identische Reihenfolge: Wiederverwenden Sie den Benutzer passend zur persönlichen E-Mail (fallunempfindlich, älteste gewinnt), eine doppelte Mitgliedschaft mit 409 verweigern, erstellen durch MemberService, Spiegel in die SicherheitProvider org, re-materialisieren Rechte, dann senden Sie die Überprüfung und WELCOME E-Mails. Daraus fallen zwei weitere Änderungen heraus: MemberUsernameGenerator füllt einen leeren Benutzernamen aus, in der Reihenfolge, die das Produkt angefordert hat für -- first.last, f.last, first.l, first.m.n.m.last, dann die gleichen vier nummeriert. Es Faltt Akzente, respektiert die 20-Zeichen-Spalte, endet nie auf einem Separator und Nie prägt einen reservierten Griff. Verfügbarkeit wird global untersucht, weil Login löst LOWER(u.username) über die ganze Tabelle, bevor sie eine Org anschaut. UsernameAvailabilityRepository ist SecurityService-lokal, so dass diese ohne Shared-Bibliothek Version Beule; der gemeinsame Sucher ist genau-Fall und wirft regelrecht sobald zwei Reihen kollidieren. Ein handgebuchter Benutzername, der nur von Fall kollidiert, wird nun abgelehnt statt einen zweiten Benutzer erstellen. Das Paar ist unwiederbringlich: Beide Konten werden Mehrdeutig bei der Anmeldeform und findByUsername wirft für jeden von ihnen danach. Das Single-Record-Formular sendet immer einen Benutzernamen, den es bereits hat validiert, so dass nichts zurückgeht. ************ lernt AuszugOrgId, der extraUserId's ist Geschwister und fehlte nur, weil die beiden Controller mit ihm vor der Muster. Vier Grundlinien-Einträge gehen dazu.