Membres de la création en bloc et membres de l'équipe, une transaction par dossier

FeatureSecurityService
Expédié
29 août 2026 à 20:16 UTC
Auteur
Kamo
Commite
0e87cad

Les deux écrans d'ajout en vrac doivent créer un tableur de personnes en une seule soumission. et faire rapport à chacun d'eux individuellement. Cela ne peut pas être mis à profit sur les les points d'extrémité, de sorte que le pipeline de création sort du contrôleur. MemberCreationService est désormais propriétaire, marqué REQUIS-NEW. Chaque enregistrement est donc s'engage ou revient de son propre chef, qui est la prémisse de l'écran: a échec à 7 feuilles d'enregistrement 1-6 créées, et seules les lignes qui ont échoué restent sur le page à corriger. Si la boucle était restée dans le contrôleur, le mandataire de Spring serait n'ont pas vu l'appel (auto-invocation), chaque enregistrement aurait partagé un la transaction, et la première défaillance capturée l'aurait marqué. a rejeté les membres qui avaient déjà réussi à commettre un moment. MemberBulkCreator fait fonctionner le lot et n'est délibérément PAS transactionnel pour le la même raison -- une transaction extérieure serait empoisonnée par exactement les exceptions qu'elle existe à absorber. Il refuse également un e-mail ou un nom d'utilisateur répété dans un autre soumission, qui sinon ferait surface en tant que "déjà membre" et envoyer l'administrateur à la recherche d'un membre, cette demande même avait créé une seconde plus tôt, et elle Republie à nouveau ces réclamations lorsqu'une querelle échoue pour une autre raison. Les deux critères d'évaluation à simple enregistrement délèguent désormais le même service, de sorte que le trajet de masse. exécute une séquence identique: réutiliser l'utilisateur qui met en correspondance le courrier électronique personnel (les plus insensibles au cas-tête, les plus anciens), refuser un double adhésion à 409, créer par MemberService, refléter dans l'organisation de la sécuritéProvider, rematérialiser les droits, puis envoyer les e-mails de vérification et de BIEL SEENT. Deux autres changements s'en trouvent: MemberUsernameGenerator remplit un nom d'utilisateur vierge, dans l'ordre demandé par le produit pour -- first.der, f.der, first..l, first.m.der, puis les mêmes quatre numérotés. Il plie les accents, respecte la colonne de 20 caractères, ne se termine jamais sur un séparateur et Ne ment jamais une poignée réservée. La disponibilité est sondée à l'échelle mondiale, car la connexion résout LOWER(u.username) sur l'ensemble du tableau avant qu'il ne regarde n'importe quel org. Nom d'utilisateurDisponibilitéRepository est SecurityService-local donc ce navire sans bosse de version partagée-bibliothèque; le détecteur partagé est exact et jette purement et simplement une fois que deux rangées entrent en collision. Un nom d'utilisateur de type mandant qui ne croise que par cas est désormais refusé plutôt que créer un deuxième utilisateur. Cette paire est irrécupérable: les deux comptes deviennent ambigus au format de connexion et findByUsername lancers pour chacun d'eux par la suite. Le formulaire unique d'enregistrement envoie toujours un nom d'utilisateur qu'il a déjà validés, donc rien n'y régresse. - apprend l'extractOrgId, qui est l'extraitUserId s'il manquait et ne manquait que parce que les deux contrôleurs l'utilisant sont antérieurs à la schéma. Quatre rubriques de référence vont avec.

Tous les changements

Comme ce que tu vois expédier ?

Chacune de ces mises à jour atterrit automatiquement dans votre espace de travail. Commencez gratuitement et regardez-le grandir semaine après semaine.

Commencez gratuitement pour toujoursPrix de visualisation