Тестовое задание OZON
Необходимо реализовать сервис, который должен предоставлять API по созданию сокращенных ссылок следующего формата:
- Ссылка должна быть уникальной и на один оригинальный URL должна ссылаться только одна сокращенная ссылка.
- Ссылка должна быть длинной 10 символов
- Ссылка должна состоять из символов латинского алфавита в нижнем и верхнем регистре, цифр и символа _ (подчеркивание)
Сервис должен быть написан на Go и принимать следующие запросы по http:
- Метод Post, который будет сохранять оригинальный URL в базе и возвращать сокращённый
- Метод Get, который будет принимать сокращённый URL и возвращать оригинальный URL
Решение должно быть предоставлено в «конечном виде», а именно:
- Сервис должен быть распространён в виде Docker-образа
- В качестве хранилища ожидается использовать in-memory решение И postgresql. Какое хранилище использовать указывается параметром при запуске сервиса.
- Покрыть реализованный функционал Unit-тестами
Структура проекта:
.
├── bin // директория с исполняемым файлом
├── cmd
│ ├── apiserver // точка входа в приложение
├── internal
│ ├── database // работа с postgres (загрузка/выгрузка в бд)
│ ├── handlers // обработка запросов (как postgres так и internal memory)
│ ├── models // структура JSON
│ ├── utils
│ ├── hash_func // хэш функция
│ ├── json_parse // парсинг JSON
│ ├── responses // обработчик ответов
├── postgres // SQL файл с миграциями
└── configs // конфиг файл postgres
Пример
Запрос:
curl --request POST --data '{"url" : "ozon"}' http://localhost:8080/
Ответ:
{"url":"Li0QUvKTcT"}
Пример
Запрос:
curl --request GET --data '{"url" : "Li0QUvKTcT"}' http://localhost:8080/
Ответ:
{"url":"ozon"}
Запуск на текущей машине с postgres хранилищем
source ./db_init.sh $(sed -n 4p configs/pg_config)
make build
make run_pg
Запуск на текущей машине с internal memory хранилищем
make docker_build_im
make run_im
Запуск ВМ docker с internal memory хранилищем
make docker_build_im
make docker_run_im
Запуск ВМ docker с postgres хранилищем
make docker_build_pg
make docker_run_pg
Покрытие тестов
В тестировании покрывается бизнес-логика приложения, также проверяется равномерность распределения значений используемой хэш-функции
Запуск
source ./db_init.sh $(sed -n 4p configs/pg_config)
make test