Это приложение для сокращения URL с использованием Docker и Redis. Приложение позволяет сократить URL и создать короткую ссылку, которая будет перенаправлять на оригинальный ресурс.
- Dockerfile — используется для создания Docker-образа приложения.
- docker-compose.yml — конфигурация Docker Compose, включающая сервисы Redis и приложение.
- server.js — основной серверный файл на Node.js, реализующий логику сокращения URL.
- views/ — каталог с шаблонами для отображения страниц (используется EJS).
- services/ — каталог с сервисами:
- IStorageService.js — интерфейс для различных хранилищ URL.
- RedisStorageService.js — реализация хранилища URL с использованием Redis.
- InMemoryStorageService.js — альтернативное хранилище (в памяти) для локального тестирования.
- UrlService.js — сервис обработки и сокращения ссылок.
- Установленный Docker для контейнеризации приложения.
- Node.js — для выполнения серверной логики приложения.
Убедитесь, что все зависимости установлены перед запуском приложения.
-
Клонируйте репозиторий:
git clone https://github.com/YanKarpov/URL-shortening-service.git cd URL-shortening-service -
Соберите и запустите контейнеры:
docker-compose up --build
-
Перейдите в браузер и откройте http://localhost:3000.
-
Используйте интерфейс для создания сокращённых ссылок.
В ходе рефакторинга код стал чище, гибче и удобнее для расширения.
- SRP (Принцип единственной ответственности) – логика хранения и обработки ссылок теперь разделена.
UrlServiceотвечает только за работу с URL, аredisStorage.js— за хранение данных. - OCP (Принцип открытости/закрытости) – теперь можно заменить Redis на другое хранилище (например, MongoDB) без изменения основной логики.
- DIP (Принцип инверсии зависимостей) –
UrlServiceтеперь работает через абстрактный интерфейсIStorageService, а не напрямую с Redis. Это снижает зависимость от конкретного хранилища. - LSP (Принцип подстановки Барбары Лисков) – добавлен
IStorageService, который можно реализовать для любого хранилища (Redis, файлы, базы данных), не ломая код. - ISP (Принцип разделения интерфейсов) –
IStorageServiceсодержит только минимальный набор методов (save,get), избавляясь от лишних зависимостей. В будущем можно выделитьIClickStatsServiceдля сбора статистики.
Теперь сервис легко расширять: можно добавить аналитику, сменить хранилище или доработать API без переписывания всей системы. Код стал логичнее и проще в поддержке.
Тесты обращаются к уже работающему серверу http://localhost:3000,
поэтому перед запуском тестов нужно поднять контейнеры Docker, т.к как минимум нужно стучаться к рабочему Redis.
Но лучше себе жизнь не усложнять и запустить сразу само приложение и Redis с учётом наличия docker-compose.yml
docker-compose up --build -dЛокально установите Node.js-зависимости:
npm installnpm test
npm run allure:report