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
Тестовое от Озон. Сервис сокращения ссылок
- Host: GitHub
- URL: https://github.com/hud0shnik/linkcutter
- Owner: hud0shnik
- Created: 2023-05-23T18:53:48.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-05-24T20:08:20.000Z (about 3 years ago)
- Last Synced: 2025-01-14T01:45:25.816Z (over 1 year ago)
- Topics: api, docker, docker-compose, go, makefile, postgresql, shell
- Language: Go
- Homepage:
- Size: 17.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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
```