Микросервис для управления экспериментами на платформе Avito. Этот сервис был создан с целью централизовать управление проводимыми экспериментами, тестами новых продуктов, интерфейса, скидками и другими важными изменениями. Основной функционал сервиса включает в себя управление пользователями и их принадлежностью к различным сегментам, в которых они могут участвовать. Сюда входят операции создания, изменения и удаления сегментов, а также добавления и удаления пользователей из сегментов.
Используемые Технологии:
- PostgreSQL (в качестве хранилища данных)
- Docker (для запуска сервиса)
- Swagger (для документации API)
- Chi (для роутинга HTTP)
- pgx (драйвер для работы с PostgreSQL)
- golang/mock, testify (для тестирования)
Сервис написан по Чистой Архитектуре.
Создайте .env файл с заполненными поляни как по примеру в .env_example или просто переименуйте его в .env
- Запустить сервис можно с помощью команды:
make run-docker
- Далее следует произвести миграции в базу данных.
make migrate-up
В migrations/000001_init_schema.up предоставлен конечный SQL файл с созданием всех необходимых таблиц в БД и мигрируются лишь сами тиблицы без данных, как требовалось в задаче.
Документацию после запуска сервиса можно посмотреть по адресу http://localhost:8080/swagger/index.html
с портом 8080 по умолчанию.
Для запуска тестов необходимо выполнить команду make test
Добавление сегмента http://localhost:8080/create-segment Request:
Method: POST
{
"name":"segment5099"
}
Response
{
"message": "success"
}
Удаление сегмента http://localhost:8080/delete-segment Request:
Method: DELETE
{
"name":"segment5099"
}
Response
{
"message": "success"
}
Добавление пользователя в сегмент http://localhost:8080/add-user-to-segment Request:
Method: POST
{
"userid":1002,
"segments_to_add":[
"segment7",
"segment2",
"segment3"
],
"segments_to_delete":[
"segment5",
"segment6"
]
}
Response
{
"message": "success"
}
Получение сегментов в которых состоит пользователь http://localhost:8080/active-user-segments Request:
Method: Get
{
"userid":10002
}
Response
[
"segment3",
"segment7",
"avitoCoolSegment"
]
Доп задание Получение отчета за месяц http://localhost:8080/get-history Request:
Method: Get
{
"year": "2023",
"month": "08"
}
Response Возвращается ссылка на CSV файл
{
"message": "http://localhost:8080/tmp/2023-08.csv"
}