Архитектура
AlexUser - таблица которая отвечает за пользователей которые зарегистрированы в системе.
Если User будет удален, сразу за ним удалится и виджет который принадлежит этому юзеру. Удаление каскадное уже реализовано в таблице. Это справедливо для всех зависимостей. Где нужно будет удаление кодом - я напишу об этом.
domain - url сайта вида mysite.ua
Widget - таблица отвечает за все созданные виджеты которые принадлежат пользователю. Один пользователь может иметь только один виджет. Это справедливо что Виджет = один вебсайт. Значит настройки виджета хранятся в этой таблице.
is_code_active - это enum который может принимать только два значения active' и 'inactive'. Где inactive означает что код не активен на сайт, а active означает что код установлен на сайт и работает корректно. По умолчанию таблица ставит в 'inactive' и только после того как код поставлен на сайт, должны менять значение на active и показывать в админке что с кодом все хорошо. Проверяется раз в сутки например.
is_widget_active - такой же тип как и тип выше, но отвечает за функцию, работает ли код на сайте или нет. Пользователь может отключить виджет в админке. в таком случае виджет должен перестать показываться на сайте.
inactive_uri - формат массива или объекта где содержатся все документы на которых виджет НЕ должен показываться. Например {‘/contacts’,’/profile’} означает что виджет не будет показываться на страницах контактов и в профиле пользователя.
public_id - публичный идентификатор который будет виден всем и везде. По этому идентификатору можно получить доступ к конкретному виджету с его настройками.
widget_code - SPC который пользователь должен поставить на WRU
User_idUser - ссылка на конкретного пользователя в таблицу User. Например можно получить любые данные о пользователе которому принадлежит этот виджет. Для этого нужно сделать следующий запрос: SELECT idUser,email,first_name,last_name,domain,create_time FROM User WHERE (SELECT User_idUser FROM Widget WHERE public_id = 'rRdE4rdWE43') = idUser
где 'rRdE4rdWE43' - это публичная переменная id виджета
Widget_messages - таблица в которой хранятся сообщения которые пользователь хочет показать юзеру.
message - текстовой сообщение которое будет показано юзеру. Максимальный размер в символах 300.
activate_rules - правила активации сообщения. Иными словами когда сообщение должно быть показано. Например покажи это сообщение через 15 секунд после того как пользователь посетил конкретно эту страницу.
line_number - цепочек с сообщениями может быть несколько. Одна цепочка может содержать до 20 сообщений.
queue_number - очередь сообщения в цепочке. Например 1 или 2 или 4 и т.д.
Например мы создаем сообщение с правилами. Если это первое сообщение то оно получает line_number = 1 и queue_number = 1
Создаем следующее сообщение которое должно быть отправлено пользователю. Получается линия та же line_number = 1, а queue_number = 2
is_input_message - ENUM('yes', 'no') является ли это сообщение запрашивающим у пользователя какие-то данные. По умолчанию no
input_type - ENUM('name', 'mail', 'phone', 'text') если сообщение подразумевает ответ от пользователя и запрашивает его данные. То в этой колонке содержится тип запрашиваемых данных.Он нам нужен чтобы правильно делать UI и потом данные которые пользователь ответит правило положить в базу.
Widget_idWidget - ссылка на виджет кому принадлежит это сообщение.
Site_user - таблица в которой хранятся все пользователи которые заходили на сайт.
coockie_identifier - кука которая ставится пользователю после того как он впервые попал на сайт где установлен виджет. Служит нам для идентификации юзера впоследствии. Было бы здорово если можно было еще как-то идентифицировать пользователя. Например ставить ему этот же идентификатор в user storage в хроме.
name - имя юзера будет записано после того как он сам его отдаст виджету
phone - телефон после того как юзер отдал его юзеру
email - почта юзера после того как он отдал ее виджету
Widget_idWidget - ссылка на виджет
Site_user_has_Widget_messages - ссылка на сообщение, например, для того чтобы показывать в аналитике, после какого сообщения пользователь ввел свои данные. (В будущем предполагается что сообщения можно будет тестировать, проводит A/B тест сообщений)