An open API service indexing awesome lists of open source software.

https://github.com/hud0shnik/linkcutter

Тестовое от Озон. Сервис сокращения ссылок
https://github.com/hud0shnik/linkcutter

api docker docker-compose go makefile postgresql shell

Last synced: 3 months ago
JSON representation

Тестовое от Озон. Сервис сокращения ссылок

Awesome Lists containing this project

README

          

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

# Задание

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

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

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

**Пример 1**

Реквест:

```
curl --request POST --data '{"url" : "ozon.ru"}' http://localhost:8080/
```

Респонс:

```
{"url":"eLTSOnefTX"}
```

**Пример 2**

Реквест:

```
curl --request GET --data '{"url" : "eLTSOnefTX"}' http://localhost:8080/
```

Респонс:

```
{"url":"ozon.ru"}
```

# Запуск

**Запуск на текущей машине с PostgreSQL**

```
make build
make run_db
```

**Запуск на текущей машине с In-Memory хранилищем**

```
make build
make run_im
```
**Запуск в docker контейнере с In-Memory хранилищем**

```
make docker_build_im
make docker_run_im
```
**Запуск в docker контейнере с PostgreSQL**

```
make docker_build_db
make docker_run_db
```