TinyURL - простой сервис сокращения ссылок.
Подстановка переменых окружения:
Пример данных находиться в файле .env.example, вам остаёться только подставить свои значения. Впринципе данные в примере вполне сойдут, вы можете просто переименовать файл в .env
Развертывание :
docker-compose up --build -dПосле развертывания будут доступны следующие адресса:
- localhost:8000/docs -
OpenAPI(Swager) интерфейс дляAPI - localhost:8080 - Фронтенд часть
Backend-часть проекта разделена на несколько частей:
- Развертывание БД и приминение миграций(
Postgres) - Compressor(
FastAPI+pydantic) - Redirect(
FastAPI)
Простая база данных развертываямая с параметрами из env-файла. Миграции применяються из каталога migrations/versions. Те в свою очередь были созданы из sqlalchemy-модейлей лежащих по путям app/backend/components/*/models.py (все настройки alembic лежат в alembic.ini и migrations/env.py). Для дальнейшей работы с БД создан генератор сессий в файле app/backend/base/database.py.
В ходе данного проета была создана всего одна таблица(links), содержащая:
idshort- ключ присваеваемый записи для подстановку в url-адрес для переадресации, состоит из цифр, латинских букв верхнего и нижнего регистра(минимум 8 символов)full- полная ссылка на перенаправляемый ресурсcreate_at- время создания ссылки
На этом этапе был создан компонент app/backend/compressor/ отвечающий за сокращение ссылок и добавления из в БД. Включает следущие файлы:
models.py- sqlalchemy-модель для таблицыlinksrouter.py- роутерFastAPI, содержащий endpoint/addпринимающийAddLinkSchemeиsessionизdepends(явно сессию передавать не обезательно) и служащий для перенаправление данных в utils(add_link). Возвращает схемуLinkScheme.schemes.py- содержит две схемыAddLinkSchemeиLinkSchemeservices.py- содержит функцию определения short для новой ссылкиutils.py- содержит функции обращающиеся к базе данных, в данном случаи написаны 2 функцииadd_linkиget_latest_url(используемая преимущественно вservices.py)
На этом этапе был создан компонент app/backend/redirect/ отвечающий за получение полной ссылки из короткой включает следущие файлы:
router.py- содержит endpoint/{short}. Возвращает либо ссылку либо перенаправления в зависимости от места вызова.utils.py- содержит функциюget_link_by_short
Простая архитектура из html, css и js, без использования каких либо фреймворков. Запросы выполняються через axios, имееться сообщение об ошибке в случаи её наличия и кнопка копирования результата.
Из сложного - пришлось настроить CORS в FastAPI.
Для даного проекта было использовано 2 dockerfile и 1 docker-compose:
dockerfile- файл для backend-части использующий python и устанавливающий зависимостиdockerfile_frontend- файл для frontend-части использующийjsи устанавливающийlive-serverdocker-compose.yaml- загружает стороние образы и собирающий образы проекта:postgres- развёртывание БДalembic- приминение миграцийfastapi- поднятие сервераfrontend- запуск клиентской частиnetworks:main- общая сеть для всех образов

