Bulk-create members and team members, one transaction per record

FeatureSecurityService
Порезанный
29 августа 2026 г. в 20:16 UTC
Автор
Kamo
Обещать
0e87cad

Два больших экрана должны создать электронную таблицу людей в одном представлении и сообщать о каждом из них индивидуально. Это не может быть построено на существующих конечные точки, поэтому конвейер создания выходит из контроллера. Сейчас ей владеет компания MemberCreationService с пометкой REQUIRES NEW. Каждая запись Совершает или откатывается самостоятельно, что является всей предпосылкой экрана: Неудачи на рекордных 7 листах создали 1-6, и только те ряды, которые не удались, остаются на рекордных Страница должна быть исправлена. Если бы петля осталась в контроллере, прокси Спринг Не видел, чтобы кто-либо из них (или кто-либо) обращался к нему. Сделка, и первый пойманный сбой отметил бы его только откатом и Отказался от членов, которые уже успели совершить. MemberBulkCreator запускает пакет и намеренно не является транзакционным для по той же причине — внешняя сделка будет отравлена именно теми исключениями, которые она делает. существует для поглощения. Он также отказывается от электронного письма или имени пользователя, повторенного в одном из них. представление, которое в противном случае всплыло бы как «уже член» и отправило бы администратору В поисках члена эта самая просьба создала вторую раньше, и она Освободить эти претензии снова, когда ряд не удается по какой-то другой причине. Обе однозаписные конечные точки теперь делегируют одну и ту же услугу, поэтому основной путь выполняет идентичную последовательность: повторно использовать пользователя, соответствующего личной электронной почте (случайно-бесчувствительный, самый старый выигрыш), отказаться от дублированного членства с 409, создать через MemberService, зеркально отражаясь в организации SecurityProvider, рематериализовать права, Затем отправьте подтверждение и добро пожаловать по электронной почте. Из этого вытекают еще два изменения: MemberUsernameGenerator заполняет пустое имя пользователя в том порядке, в котором запрашивается продукт сначала.last, f.last, first.l, first.m.last, затем те же четыре пронумерованы. Это Складывает акценты, уважает 20-символьную колонку, никогда не заканчивается на сепараторе и Никогда не печатает зарезервированную ручку. Доступность исследуется глобально, потому что вход в систему Разрешает LOWER (u.username) по всей таблице, прежде чем смотреть на любую организацию. UsernameAvailabilityRepository является локальной службой безопасности, поэтому эти суда без каких-либо Shared-библиотечная версия: Shared Finder является точным и выбрасывает прямо Один раз два ряда сталкиваются. Имя пользователя ручной работы, которое сталкивается только в случае отказа, а не Создание второго пользователя. Эта пара не подлежит восстановлению: оба счета становятся двусмысленный в форме входа и найдите броски ByUsername для каждого из них После этого. Однозаписная форма всегда отправляет имя пользователя, которое у нее уже есть. Это подтверждается, поэтому ничего не регрессирует. **************************** Узнает экстрактOrgId, который является экстрактомUserId и отсутствовал только потому, что два контроллера, использующие его, предшествовали шаблон. Четыре базовые записи идут с ним.

Все изменения

Как вы видите судоходство?

Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.

Начните бесплатно навсегдаПосмотреть цены