8000 GitHub - nechel11/test_ozon: вариация решения тестового задания OZON
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

nechel11/test_ozon

Repository files navigation

сокращатель ссылок

Тестовое задание OZON

Содержание

  1. Описание задачи
  2. Демонстрация работы
  3. Запуск
  4. Тестирование

Задание

Необходимо реализовать сервис, который должен предоставлять API по созданию сокращенных ссылок следующего формата:

  • Ссылка должна быть уникальной и на один оригинальный URL должна ссылаться только одна сокращенная ссылка.
  • Ссылка должна быть длинной 10 символов
  • Ссылка должна состоять из символов латинского алфавита в нижнем и верхнем регистре, цифр и символа _ (подчеркивание)

Сервис должен быть написан на Go и принимать следующие запросы по http:

  1. Метод Post, который будет сохранять оригинальный URL в базе и возвращать сокращённый
  2. Метод Get, который будет принимать сокращённый URL и возвращать оригинальный URL

Решение должно быть предоставлено в «конечном виде», а именно:

  • Сервис должен быть распространён в виде Docker-образа
  • В качестве хранилища ожидается использовать in-memory решение И postgresql. Какое хранилище использовать указывается параметром при запуске сервиса.
  • Покрыть реализованный функционал Unit-тестами

Демонстрация работы

ozon_test

Структура проекта:

.
├── 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

About

вариация решения тестового задания OZON

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0