Требуется реализовать сервис, хранящий пользователя и сегменты, в которых он состоит (создание, изменение, удаление сегментов, а также добавление и удаление пользователей в сегмент).
Полное описание задачи по ссылке.
- Сервис должен предоставлять HTTP API с форматом JSON как при отправке запроса, так и при получении результата.
- Язык разработки: Golang.
- Фреймворки и библиотеки можно использовать любые.
- Реляционная СУБД: MySQL или PostgreSQL.
- Использование docker и docker-compose для поднятия и развертывания dev-среды.
$ git clone https://github.com/ptoshiko/avito_assignment.git
$ cd avito_assignment
$ make run
make testdb
make t
Метод создания сегмента.Принимает slug (название) сегмента.
Пример запроса
curl -X POST -H "Content-Type: application/json" -d '{
"seg_name": "AVITO_DISCOUNT_50"
}' http://localhost:8080/segment/create
Ответ
{
"message":"Segment created successfully"
}
Метод удаления сегмента. Принимает slug (название) сегмента.
Пример запроса
curl -X DELETE -H "Content-Type: application/json" -d '{
"seg_name": "AVITO_DISCOUNT_30"
}' http://localhost:8080/segment/delete
Ответ
{
"message": "Segment deleted successfully"
}
Метод добавления пользователя в сегмент. Принимает список slug (названий) сегментов которые нужно добавить пользователю, список slug (названий) сегментов которые нужно удалить у пользователя, id пользователя.
Валидным считается запрос, в котором:
- сегменты из списка для добавления присутвуют в таблице сегментов
- сегменты из списка для удаления принадлежат пользователю
- один из списков может быть пустым В остальных случаях запрос считается невалидным.
Пример запроса
curl -X PATCH -H "Content-Type: application/json" -d '{
"user_id": 1,
"segments_to_add": ["AVITO_VOICE_MESSAGES"],
"segments_to_remove": ["AVITO_PERFORMANCE_VAS"]
}' http://localhost:8080/user/1
Ответ
{
"message": "User segments updated successfully"
}
Метод получения активных сегментов пользователя. Принимает на вход id пользователя.
curl -X GET http://localhost:8080/user/1
Ответ
{
[{"seg_id":1,"seg_name":"AVITO_DISCOUNT_30"},{"seg_id":3,"seg_name":"AVITO_VOICE_MESSAGES"}]
}