В Авито часто проводятся различные эксперименты — тесты новых продуктов, тесты интерфейса, скидочные и многие другие. На архитектурном комитете приняли решение централизовать работу с проводимыми экспериментами и вынести этот функционал в отдельный сервис.
Требуется реализовать сервис, хранящий пользователя и сегменты, в которых он состоит (создание, изменение, удаление сегментов, а также добавление и удаление пользователей в сегмент)
make run
Если приложение запускается впервые, то необходимо применить миграции к базе данных:
make migrate-up
Пример запроса:
curl -X POST -H "Content-Type: application/json"
-d '{"username": "denchika", "password": "abobus123"}'
http://localhost:8080/auth/sign-up
Пример ответа:
{
"status": 200
}
Пример запроса:
curl -X GET -H "Content-Type: application/json"
-d '{"username": "denchika", "password": "abobus123"}'
http://localhost:8080/auth/sign-in
Пример ответа:
{
"Token": "Your access-token"
}
Пример запроса:
curl -X POST -H "Content-Type: application/json"
-H "Authorization: Bearer `Your token`
-d '{"slug": "ABOBA"}'
http://localhost:8080/segment/
Пример ответа:
{
"Id": 1
}
Пример запроса:
curl -X DELETE -H "Content-Type: application/json"
-H "Authorization: Bearer `Your token`
-d '{"slug": "ABOBA"}'
http://localhost:8080/segment/
Пример ответа:
{
"status": 200
}
Пример запроса:
curl -X POST -H "Content-Type: application/json"
-H "Authorization: Bearer `Your token`
-d '{"slugs-to-add": ["ABOBA"], "slugs-to-remove": []}'
http://localhost:8080/users-segments/
Пример ответа:
{
"slugs-that-have-been-added": [
"ABOBA"
],
"slugs-that-have-been-removed": null
}
Пример запроса:
curl -X GET -H "Content-Type: application/json"
-H "Authorization: Bearer `Your token`
http://localhost:8080/users-segments/
Пример ответа:
{
"slugs": ["ABOBA"]
}
Swagger файл описан в директории docs
При работающем приложении можно посмотреть здесь