Сервис динамического формирования онбординга, сбора статистики и вывода её через RestAPI.
Мной было решено уйти от концепции дерева, т.к. такая реализация не позволяет
достаточно гибко формировать вопросы для клиента и вызывает неудобство работы с множественными полями.
В итоге было решено реализовать онбординг в виде направленного графа.
"Цельным" онбордингом является только начальный, при этом его потомки больше похожи на конструктор,
из которых собирается следующая страница онбординга, так же в основе такого решения лежит концепция в виде от общего к частному.
Есть определённые условия, которых необходимо придерживаться для корректного вывода(в проекте реализована валидация сохранения/редактирования через админ-панель и ORM):
- Запрещены циклические вызовы опросников, чтобы клиент не попал в бесконечные ответы и не "ломал" статистику;
- Опросник ссылается на следующий опросник только из одного поля, иначе сама логика онбординга построена не правильно;
- Скрытие опросников, клиент на которые уже отвечал - поддержка чистоты статистики и защита от случайных связей;
- Начало онбординга всегда состоит из одного опросника, при этом любой потомок может стать "началом", отдельно от родителя.
Работа с пользователем упрощена до минимума, одна форма для регистрации и авторизации.
В объекте модели "Тип поля" регулярное выражение "главнее" типа, т.е. его наличие поменяет поле на "text".
В форме создания "Поле опроса" пункт "Значения поля" закастомлен через JS
, от выбора в "Тип поля" он может быть множественным или единичным,
следите за состоянием, возможно, могло что-то поломаться.
В "Начальные опросы" можно указать другое начало онбординга, изменив единсвенный элемент.
На детальной странице элемента "Поля опроса", если у него несколько значений для выбора, выводится диаграмма с информацией из "Данные по опросу".
Имеется "ручка" с выводом ответов клиентов на опросники, подключен filter и пагинация, с реализацией можно познакомиться на странице Swagger-a
(кнопка-ссылка на главной странице).
Тестовые данные(типы полей, опросы, поля опросов) формируются через
management command
, там вы можете убрать, например, обязательные поля или "мешающие" типы.
Через Docker
- 1. Создать и заполнить файл
.env
в папкеinfra
по шаблону.env.example
. -
2. Если имеется утилита
Make
, в корне проекта выполнить командуmake project-init
,иначе
выполнить команду
docker compose -f ./infra/docker-compose.yml --env-file ./infra/.env up -d
.Docker
соберёт контейнеры сpostgreSQL
, приложением, выполнит миграцию,заполнит БД тестовыми данными, создаст superuser-a.
После сервер будет доступен по адрессу:
http://127.0.0.1:8000/
. -
Примечание
В контейнер с приложением проброшен
volume
с кодом, изменение кода в проекте обновляет его в контейнере и перезапускает сервер. -
Последующие запуски проекта осуществляются через команду
make project-start
или
docker compose -f ./infra/docker-compose-start.yml --env-file ./infra/.env up -d
Через консоль
- 1. Создать и заполнить файл
.env
в папкеinfra
по шаблону.env.example
. -
2. Создать БД в
postgreSQL
. -
3. Установить poetry
pip install poetry
. -
4. Создать и активировать виртуальную оболочку
poetry shell
. -
5. Установить зависимости
poetry install
. -
6. Выполнить миграцию БД
python src/manage.py migrate
. -
7. Создать superuser-a
python src/manage.py createsuperuser --noinput
. -
8. Заполнить БД тестовыми данными
python src/manage.py test_data
. -
9. Запустить сервер
python src/manage.py runserver
. -
10. Сервер будет доступен по адрессу:
http://127.0.0.1:8000/
.