Разработка сервиса для управления сегментами пользователей с возможностью динамического распределения пользователей в сегменты. Сервис должен позволять создавать, удалять и редактировать сегменты, а также добавлять и удалять пользователей из сегментов. Также требуется реализовать функционал случайного распределения пользователей по сегментам на основе указанных процентных долей.
- Разработка API для создания, удаления и редактирования сегментов.
- Разработка механизма случайного распределения пользователей по сегментам с заданным процентом.
- Реализация возможности добавления/удаления сегментов для конкретного пользователя.
- Разработка API для получения списка сегментов, к которым относится конкретный пользователь.
- Создание сегментов: Создание новых пользовательских сегментов, которые могут использоваться для различных целей экспериментов или акций.
- Удаление сегментов: Возможность удалять сегменты, которые больше не актуальны.
- Редактирование сегментов: Обновление сегментов с изменением их параметров или меток.
- Добавление/удаление пользователей в сегменты: Возможность включения пользователей в сегменты и их исключения из сегментов.
- Случайное распределение сегментов: Функция, позволяющая распределять сегменты среди пользователей на основе заданных процентных долей, например, распределение сегмента [MAIL_GPT] среди 30% пользователей.
- Получение списка сегментов пользователя: Эндпоинт для получения списка сегментов, в которых состоит пользователь, по его user_id.
- Язык программирования: C++
- Фреймворк: userver для работы с веб-сервисом
- База данных: PostgreSQL для хранения информации о пользователях и сегментах
- Таблица
users
: хранит информацию о пользователях (user_id, данные пользователя). - Таблица
segments
: содержит данные о сегментах (segment_id, имя сегмента, описание). - Таблица
user_segments
: связывает пользователей с сегментами (user_id, segment_id).
- Создание сегмента MAIL_GPT.
- Добавление 30% пользователей в сегмент MAIL_GPT.
- Получение списка сегментов пользователя по user_id.
Сервис предоставляет аналитикам и другим заинтересованным пользователям возможность легко управлять сегментами, добавлять и удалять пользователей, а также проводить эксперименты с различными функциями на основе сегментированной пользовательской базы.
Makefile contains typicaly useful targets for development:
make build-debug
- debug build of the service with all the assertions and sanitizers enabledmake build-release
- release build of the service with LTOmake test-debug
- does amake build-debug
and runs all the tests on the resultmake test-release
- does amake build-release
and runs all the tests on the resultmake service-start-debug
- builds the service in debug mode and starts itmake service-start-release
- builds the service in release mode and starts itmake
ormake all
- builds and runs all the tests in release and debug modesmake format
- autoformat all the C++ and Python sourcesmake clean-
- cleans the object filesmake dist-clean
- clean all, including the CMake cached configurationsmake install
- does amake build-release
and runs install in directory set in environmentPREFIX
make install-debug
- does amake build-debug
and runs install in directory set in environmentPREFIX
make docker-COMMAND
- runmake COMMAND
in docker environmentmake docker-build-debug
- debug build of the service with all the assertions and sanitizers enabled in docker environmentmake docker-test-debug
- does amake build-debug
and runs all the tests on the result in docker environmentmake docker-start-service-release
- does amake install-release
and runs service in docker environmentmake docker-start-service-debug
- does amake install-debug
and runs service in docker environmentmake docker-clean-data
- stop docker containers and clean database data
Edit Makefile.local
to change the default configuration and build options.