Skip to content

Локальный сервер по сокращению URL-ссылок

Notifications You must be signed in to change notification settings

YanKarpov/URL-shortening-service

Repository files navigation

Сервис сокращения URL с Docker

Описание проекта

Это приложение для сокращения 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 — для выполнения серверной логики приложения.

Убедитесь, что все зависимости установлены перед запуском приложения.

Установка и запуск:

  1. Клонируйте репозиторий:

    git clone https://github.com/YanKarpov/URL-shortening-service.git
    cd URL-shortening-service
    
  2. Соберите и запустите контейнеры:

    docker-compose up --build
    
  3. Перейдите в браузер и откройте http://localhost:3000.

  4. Используйте интерфейс для создания сокращённых ссылок.

Рефакторинг по SOLID: что улучшилось?

В ходе рефакторинга код стал чище, гибче и удобнее для расширения.

  • SRP (Принцип единственной ответственности) – логика хранения и обработки ссылок теперь разделена. UrlService отвечает только за работу с URL, а redisStorage.js — за хранение данных.
  • OCP (Принцип открытости/закрытости) – теперь можно заменить Redis на другое хранилище (например, MongoDB) без изменения основной логики.
  • DIP (Принцип инверсии зависимостей)UrlService теперь работает через абстрактный интерфейс IStorageService, а не напрямую с Redis. Это снижает зависимость от конкретного хранилища.
  • LSP (Принцип подстановки Барбары Лисков) – добавлен IStorageService, который можно реализовать для любого хранилища (Redis, файлы, базы данных), не ломая код.
  • ISP (Принцип разделения интерфейсов)IStorageService содержит только минимальный набор методов (save, get), избавляясь от лишних зависимостей. В будущем можно выделить IClickStatsService для сбора статистики.

Какая польза от этого?

Теперь сервис легко расширять: можно добавить аналитику, сменить хранилище или доработать API без переписывания всей системы. Код стал логичнее и проще в поддержке.

About

Локальный сервер по сокращению URL-ссылок

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published