Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/ereminiu/url-shortener

Сокращатель ссылок. Go + Postgres
https://github.com/ereminiu/url-shortener

gin gin-gonic go golang link-shortener postgres url-shortener

Last synced: about 1 month ago
JSON representation

Сокращатель ссылок. Go + Postgres

Awesome Lists containing this project

README

        

# link-shorter
(scroll down for english description)

Аналог [Bitly](https://bitly.com)

## Функции:
* Получить короткий код для заданной ссылки (POST /addlink)
* Перейти по оригинальной ссылке по короткому коду (GET /getlink)
* Ввести кастомный код вместо случайного (POST /addcustomlink)
* Получить исходную ссылку по кастомному коду (GET /getcustomlink)

## Инструкция по запуску:
* Создайте базу данных в докер контейнере:
```
docker run --name=shrt-db -e POSTGRES_PASSWORD='qwerty' -p 5436:5432 -d --rm postgres
```
Порты для базы данных можно задать в файле configs/config
* Запустите этот контейнер:
```
docker exec -it id /bin/bash
```
* Если запускаете приложение в первый раз, то примените миграции:
```
migrate -path ./schema -database 'postgres://postgres:qwerty@localhost:5436/postgres?sslmode=disable' up
```
* Запустите main.go:
```
go run cmd/main.go
```
* Приложение запускается на localhost:1024, задать другой порт можно в файле configs/config.yaml поле "localhost_port"

## Описание:
* ### /addlink

формат запроса:
```json
{
"link": "https://github.com/avito-tech/auto-backend-trainee-assignment"
}
```
формат ответа:
```json
{
"hash": "0Mf61CHL"
}
```

* ### /getlink

формат запроса:
```json
{
"code": "0Mf61CHL"
}
```

в ответ происходит redirect на исходную ссылку, если "code" не существует, возвращается ответ с кодом 406:
```json
{
"messange": "Hashcode not found"
}
```

* ### /addcustomlink

формат запроса:
```json
{
"link": "https://github.com/avito-tech/auto-backend-trainee-assignment",
"custom_code": "avito-assigment"
}
```

Успешный ответ:
```json
{
"messange": "Your custom link created successfuly"
}
```
Если заданный код уже существует, то вернется ответ с кодом 406:
```json
{
"messange": "This custom link is already exist"
}
```
Если заданный код длиннее 40 символов, то вернется ответ с кодом 406:
```json
{
"messange": "Failed to create your custom links: Your code should not exceed 40 characters"
}
```

* ### /getcustomlink
формат запроса:

```json
{
"custom_code": "avito-assigment"
}
```

если код некоректный, то вернется ответ с кодом 406:
```json
{
"messange": "Custom code not found"
}
```
иначе произойдет redirect на исходную ссылку.