Общая логика работы с тенантами и аккаунтами
- Тенант - виртуальное “отдельное пространство“, которое тем не менее имеет свои схемы в базах данных, свои схемы LDAP и данные не пересекаються. Тем не менее “сервер приложений” крутит все тенанты один
- Аккаунт - учетная запись клиента в тенанте. если смотреть “выше“, у нас она абстрактная, и под ней может скрываться разные бизнес-субьекты, в зависимости от бизнеса, который реализует конкретный тенант. в 90% это “клиент бизнеса, для которого развернут тенант”.
Пока небыло ордеринга, у вас на “все про все” был только один тенант, на котором крутился бизнес сервиса “Зегол“. Все аккаунты - клиент вашего сервиса.
Сейчас появился ордеринг, мы разворачиваем личную, персональную ордер-менеджмент систему для каждого (ну, кому нужно) вашего клиента. Т.е. генерим свой тенант (свои экземпляры бд) для каждого аккаунта на тенанте Zegoal. Таким образом, на сервере (например дев) на системе Ti-Rate будет крутиться типа 100-200 тенантов. Из них 1 будет zegoal (для core бизнеса) и 99-199 ордеринг тенантов. На zegoal тенанте будет 100-200 аккаунтов (ваших клиентов), для которых собстенно будет развернуть 99-199 тенантов по шаблону “ordering”, в котором будет какое-то количество аккаунтов, которое будет равно количество контрагентов этого бизнеса (клиента core бизнеса зегол). Тенанты не пересекаються по данным (если только мы намеренно этого не сделали).
Для core бизнеса и работы с вашими клиентами мы в запросе отправляем всегда tenant=zegoal (мы вытаскиваем его из url обычно). Для работа “от имени” вашего клиента с ордеринг тенантом нужно указывать соотвествующее имя тенанта (что бы создавать ему заказы, аккаунты и прочее). Имя ордеринг тенанта будет храниться в АККАУНТЕ, в core тенанте Zegoal, в сущности reference.
Получаем:
- вся логика, которая была реализована ДО разработки ордеринга, идет и будет идти на тенанте zegoal.
- работа с конкретной ордеринг-системой для конкретного вашего клиента будет идти с его индивидуальным ордеринг-тенантом.
Например, фирма по развозке воды купила у Zegoal тариф БИЗНЕС с ордерингом, ее аккаунт=67, и ордеринг тенант имеет имя order67), когда мы делаем запрос API CreateOrder и указываем tenant = order67 и account_id = 2, то это значит что мы сразу идем в тенант (ордеринг систему) для вашего account_id=67 и уже в этом системе создаем заказ для ИХ конечного клиента… который там оказался под account_id=2. Например, это был офис True Item по улице Московской. Как только вы указали tenant != zegoal, какой-то другой. то и аккаунты там свои. так как база данных своя.
Каждый тенант по сути полноценный биллинг, который конфигурацией “обрезан“, что бы там был только ордеринг и то что для него нужно. В теории любой ордеринг тенант можно донастроить в полноценный билинг. API работы с аккаунтами такие же, какими вы пользуетесь в core тенанте Zegoal. Все то же самое, просто конкретно с ордерингом все сделано так, что там аккаунт сам создается при создании первого заказа для этого клиента (конечного) дальше создаем заказы уже зная, что “офис True Item который получает воду” это аккаунт 2. А бизнес, который развозит воду, имеет аккаунт = 67 у вас в core тенанте zegoal и имеет имя ордеринг тенанта order67.
Выходит: крутиться наш сервер с двумя десятками контейнеров и 1 главным ядром бизнес логики. На этом всем есть 1 core tenant zegoal и 200 урезанных тенантов для ордеринга. в тенанте zegoal все ваши клиенты и их инвойсы на оплату услуг сервиса геопозиций и тасок zegoal. в каждом из 200 тенантов есть по 10, 100, 1000, 10 000 аккаунтов конечных клиентов этих бизнесов. где лежат инвойсы на оплату ордеров по доставке воды… полива растений, химчисток и что еще там они смогут придумать в своем бизнесе. При этом их данные не пересекаются.
Оговорка про URL серверов.
Для работы с тенантами != zegoal, то соотвественно нужно работать с другим url. Вместо https://zegoal.dev.ti-rate.com, в котором как видите уже зашит тенант, нужно обращатся к https://dev.ti-rate.com, указывая обязательно в запросе тенант. В целом, вы можете и для работы с тенантом zegoal использовать “короткий” адрес, просто в каждом запросе указывая tenant = zegoal. С prod сервером все аналогично.