No description
Find a file
2024-04-08 22:45:31 +05:00
app Убрал логику в сервис 2024-04-08 22:45:31 +05:00
docker Убрал логику в сервис 2024-04-08 22:45:31 +05:00
.dockerignore Убрал логику в сервис 2024-04-08 22:45:31 +05:00
.env_template Добавил тестирование 2024-04-07 12:46:14 +05:00
.gitignore Убрал логику в сервис 2024-04-08 22:45:31 +05:00
alembic.ini Initial commit 2024-04-05 16:23:27 +05:00
docker-compose.yml Убрал логику в сервис 2024-04-08 22:45:31 +05:00
Dockerfile Убрал логику в сервис 2024-04-08 22:45:31 +05:00
LICENSE Initial commit 2024-04-05 16:23:27 +05:00
pytest.ini Добавил тестирование 2024-04-07 12:46:14 +05:00
README.md Убрал логику в сервис 2024-04-08 22:45:31 +05:00
requirements.txt Убрал логику в сервис 2024-04-08 22:45:31 +05:00
ruff.toml Убрал логику в сервис 2024-04-08 22:45:31 +05:00

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

Ruff

Данный проект предоставляет API для сокращения ссылок и отслеживания переходов по этим ссылкам.

Для работы данного сервиса необходима готовя БД PostgreSQL и Redis.

Начало работы

В корне проекта создаём файл .env и заполняем его по шаблону из файла .env_template. В поле MODE указываем DEV, а в поле SHORTENER_HOST - домен сервера, где будет хоститься сервис.

Собираем докер образ

docker compose build

Запускаем докер контейнер

docker compose up

По умолчанию сервис использует порт 8000 в контейнере и порт 8000 вне контейнера.

Работа с API

Для получения сокращённой ссылки необходимо отправить POST запрос на эндпоинт /zip_url. Он вернёт новую ссылку в JSON объекте формата {"new_url": <URL>}.

При обращении по этому адресу будет выполнен редирект на оригинальный URL и в редис добавится таймстемп с указанием количества секунд от начала эпохи, когда произошёл редирект.

Получить данные счётчика редиректов можно при обращении к эндпоинту /stats/<URL_ID>, где URL_ID это айдишник, который указан в укороченном URL. Этот эндпоинт возвращает JSON объект формата {"visit_times": <redirected_times>, "timestamps": [<redirect_timestamp>]}.

Тестирование

Для начала тестирования необходимо создать файл .test.env и заполнить его по образцу из .env_template.

Для запуска тестов, так же необходимо установить все зависимости

pip install -r requirements.txt

Запуск тестов

pytest