Скажем, у нас есть 3 разных приложения - serviceapp, subscriptionapp, ecomapp, все они написаны в ruby на рельсах и используют одну и ту же базу данных в бэкенде и таблицы в бэкэнде. Таким образом, таблица пользователей для всех этих трех приложений одинакова. Если пользователь является частью serviceapp, используя тот же адрес электронной почты и учетные данные, он может войти в subscriptionapp или ecomapp и наоборот.
Причиной выбора одной и той же таблицы пользователей и другой таблицы для всех приложений является бизнес-перспектива - та же единая система управления продажами и билетами для продаж и команда CDM для отслеживания всего. Devise используется во всех трех приложениях вместе с LDAP, поэтому вход в систему и регистрация работают без проблем.
Проблема:
До сих пор пользователь last_login_at представлял собой один столбец, поэтому мы не можем точно определить, в каком приложении он последний раз входил в систему. Но теперь мы должны начать регистрировать эти детали отдельно, например, когда он последний раз входил в serviceapp, ecomapp, приложение подписки по отдельности.
Также мы начинаем использовать новый crm одного конкретного приложения - subscriptionapp, а для клиентов (пользователей) этого конкретного приложения мы должны хранить дополнительную информацию, такую как unq_id из crm и т. Д.
Моя первоначальная мысль - добавить эти столбцы в саму пользовательскую таблицу. Но в будущем мы можем добавить немного дополнительной информации в таблицу пользователей, которая зависит от приложения. Следовательно, добавление его в основную таблицу пользователей не будет хорошей идеей для этого. Как мне поступить в этом случае? Несмотря на то, что я создал три разные таблицы, такие как subscriptionapp_client, ecomapp_client, serviceapp_client связывал их с пользовательской таблицей, такой как user has_one *** _ client.
Если существует такая связь, как если бы user.subscriptionapp_client.present?
он был клиентом этого приложения, и мы можем сохранить последний вход в систему по адресу crm_uniq_id и все в этой таблице.
Есть ли другой хороший подход, который мог бы решить проблему здесь? Я читаю о MTI, но похоже, что это не решит проблему.