Skip to content

DarlingInSteam/CompressRankSystem

Repository files navigation

CompressRankSystem

Статус проекта: В разработке Версия Лицензия: Apache 2.0 Java Spring Boot React Kafka

📋 Содержание

📝 Обзор

CompressRankSystem - это комплексный облачный сервис для управления, сжатия и ранжирования изображений и манги. Система построена на микросервисной архитектуре, что обеспечивает высокую масштабируемость, отказоустойчивость и гибкость разработки.

Ключевые возможности

  • 🖼️ Управление изображениями: загрузка, хранение, просмотр и удаление изображений
  • 🗜️ Сжатие изображений: оптимизация размера изображений с разными уровнями компрессии
  • 📊 Статистика и рейтинг: отслеживание популярности контента по просмотрам и скачиваниям
  • 🔒 Аутентификация и авторизация: многоуровневая система ролей и прав доступа
  • 🖥️ Административная панель: современный реактивный интерфейс для управления системой
  • 📚 Управление мангой: создание, редактирование и публикация манги с многоуровневой структурой (тома, главы, страницы)
  • 🌐 Многоязычная поддержка: локализация контента и интерфейса

🏗️ Архитектура

Система построена на принципах микросервисной архитектуры с использованием асинхронной связи через сообщения (Kafka) для обеспечения высокой масштабируемости и отказоустойчивости.

Архитектура системы

Основные компоненты:

  • API Gateway - единая точка входа для всех клиентских запросов

    • Маршрутизация запросов к соответствующим микросервисам
    • Балансировка нагрузки
    • Аутентификация и авторизация
    • Агрегация данных от разных сервисов
    • Кеширование часто запрашиваемых данных
    • Ограничение частоты запросов (rate limiting)
  • Микросервисы - независимо развертываемые сервисы для конкретных бизнес-функций

    • Изолированная бизнес-логика
    • Отдельные базы данных (Database per Service)
    • Независимое масштабирование
    • Устойчивость к сбоям
  • Kafka - распределенная платформа потоковой обработки данных

    • Асинхронный обмен сообщениями между сервисами
    • Последовательная и надежная доставка сообщений
    • Масштабируемая обработка событий
    • Интеграция с внешними системами
    • Тематические каналы (topics) для различных типов событий:
      • image-upload-events - события загрузки новых изображений
      • compression-events - события сжатия изображений
      • user-activity-events - события активности пользователей
      • statistics-events - события для сбора статистики
      • notification-events - события для генерации уведомлений
  • PostgreSQL - реляционные базы данных для хранения данных микросервисов

    • Отдельная база данных для каждого сервиса (Database per Service)
    • Транзакционная целостность данных
    • Сложные запросы и аналитика
  • MinIO - объектное хранилище для изображений

    • S3-совместимый API
    • Высокая доступность и масштабируемость
    • Версионирование объектов
    • Политики хранения и жизненного цикла
  • Redis - распределенное хранилище данных в памяти

    • Кеширование часто запрашиваемых данных
    • Управление сессиями пользователей
    • Ограничение частоты запросов (rate limiting)
    • Временное хранение очередей задач

Схема взаимодействия микросервисов

┌─────────────┐     HTTP     ┌───────────────┐
│  Web Client │────────────▶ │  API Gateway  │
└─────────────┘             └───────┬───────┘
                                   │
                                   ▼
                   ┌───────────────┬────────────┬──────────────┬──────────────┐
                   │               │            │              │              │
              ┌────▼───┐      ┌────▼────┐  ┌────▼─────┐   ┌────▼─────┐   ┌────▼────┐
              │  Auth  │      │  Image  │  │Compression│   │Statistics│   │  Admin  │
              │ Service│      │ Storage │  │  Service  │   │  Service │   │  Panel  │
              └────┬───┘      └────┬────┘  └────┬─────┘   └────┬─────┘   └─────────┘
                   │               │            │              │
                   └───────┬───────┴────────────┴──────┬──────┘
                           │                           │
                           ▼                           ▼
                    ┌────────────┐             ┌───────────────┐
                    │ PostgreSQL │             │     Kafka     │
                    │  Databases │             │Event Streaming│
                    └────────────┘             └───────────────┘

💻 Технологический стек

Бэкенд

  • Java 21
    • Новейшие возможности языка (Records, Pattern Matching, Virtual Threads)
    • Улучшенная производительность и эффективность GC
  • Spring Boot 3.4
    • Spring WebFlux для реактивной обработки запросов
    • Spring Security для аутентификации и авторизации
    • Spring Data JPA для работы с данными
  • Spring Cloud Gateway
    • Динамическая маршрутизация
    • Предикаты и фильтры запросов
    • Интеграция с Service Discovery
  • Spring Data JPA
    • Автоматическое создание репозиториев
    • Декларативные запросы
    • Оптимизированная работа с БД
  • Kafka Client
    • Асинхронная обработка событий
    • Producer и Consumer API
    • Streams API для сложной обработки данных
  • PostgreSQL
    • Надежное хранение реляционных данных
    • JSON(B) типы для гибкого хранения
    • Полнотекстовый поиск
  • H2 Database (для разработки)
    • Встроенная БД для тестирования
    • Совместимость с PostgreSQL
  • MinIO (S3-совместимое хранилище)
    • Хранение и доступ к объектам
    • Версионирование и бэкапы
  • WebP - технология сжатия изображений
    • Высокое качество при малом размере
    • Поддержка прозрачности и анимации
  • Swagger/OpenAPI - документирование API
    • Интерактивная документация
    • Автоматическая генерация клиентов

Фронтенд

  • React 18
    • Современная компонентная архитектура
    • Concurrent Mode для улучшенной производительности
    • Server Components для оптимизированной загрузки
  • TypeScript
    • Строгая типизация для улучшения качества кода
    • Автодополнение и валидация во время разработки
  • Material UI
    • Готовые компоненты с материальным дизайном
    • Адаптивный и отзывчивый интерфейс
    • Темная и светлая темы
  • React Router
    • Клиентская маршрутизация
    • Ленивая загрузка компонентов
  • React Hook Form
    • Эффективное управление формами
    • Валидация и обработка ошибок
  • Axios
    • Удобный HTTP-клиент
    • Перехватчики запросов и ответов

DevOps

  • Docker
    • Контейнеризация сервисов и зависимостей
    • Изоляция сред выполнения
  • Docker Compose
    • Управление многоконтейнерными приложениями
    • Оркестрация для разработки
  • Gradle
    • Автоматизация сборки и тестирования
    • Управление зависимостями
  • Spring Boot Actuator
    • Мониторинг работоспособности сервисов
    • Сбор метрик и статистики
  • Prometheus и Grafana (опционально)
    • Сбор и визуализация метрик
    • Настраиваемые дашборды
  • ELK Stack (опционально)
    • Централизованное управление логами
    • Анализ и визуализация логов

🧩 Микросервисы

ApiGatewayCompressionRankSystem

API Gateway служит единой точкой входа для всех клиентских запросов, обеспечивая следующие функции:

  • Маршрутизация запросов к соответствующим микросервисам на основе URL-путей и предикатов
  • Балансировка нагрузки между экземплярами микросервисов
  • Аутентификация и авторизация с проверкой JWT-токенов
  • Агрегация данных от разных микросервисов для формирования комплексных ответов
  • Кеширование часто запрашиваемых данных для ускорения работы
  • Rate Limiting для защиты от перегрузки и DoS-атак
  • Логирование и мониторинг всех входящих запросов
  • Трансформация запросов и ответов при необходимости
  • Обработка CORS для веб-клиентов
  • Реализация паттерна Circuit Breaker для обеспечения отказоустойчивости

API Gateway настраивается с помощью Spring Cloud Gateway и использует Spring Security для обеспечения безопасности.

ImageStorageService

Сервис для хранения и управления изображениями. Обеспечивает следующие возможности:

  • Загрузка изображений с валидацией типов и размеров
  • Получение изображений с различными параметрами (размер, формат, качество)
  • Управление метаданными изображений (категории, теги, описания)
  • Удаление изображений с каскадной очисткой связанных данных
  • Организация изображений в категории и коллекции
  • Управление правами доступа к изображениям
  • Интеграция с MinIO для объектного хранилища
  • Публикация событий в Kafka о загрузке, изменении и удалении изображений
  • Поиск изображений по метаданным и тегам

Сервис хранит метаданные изображений в собственной базе данных PostgreSQL, а сами файлы размещает в MinIO.

CompressionService

Сервис выполняет сжатие изображений с использованием технологии WebP и других алгоритмов. Функционал включает:

  • Сжатие изображений с настраиваемыми параметрами качества
  • Конвертация изображений между различными форматами (JPEG, PNG, WebP)
  • Изменение размеров изображений с сохранением пропорций
  • Оптимизация изображений для веб с учетом современных стандартов
  • Пакетная обработка множества изображений
  • Планирование задач сжатия на основе приоритетов
  • Сохранение истории версий сжатых изображений
  • Генерация превью и миниатюр разных размеров
  • Потребление событий из Kafka для автоматического сжатия новых изображений
  • Публикация событий о завершении сжатия

Сервис использует нативные библиотеки WebP и другие инструменты оптимизации, интегрированные через JNI.

StatisticsRankingService

Сервис статистики и рейтингов. Собирает и анализирует данные о пользовательской активности. Функционал:

  • Сбор данных о просмотрах и загрузках изображений и манги
  • Формирование рейтингов популярности контента
  • Анализ тенденций в просмотрах и загрузках
  • Отслеживание активности пользователей (с анонимизацией данных)
  • Генерация рекомендаций на основе истории просмотров
  • Создание периодических отчетов о популярности контента
  • Расчет метрик эффективности сжатия изображений
  • Потребление событий активности из Kafka
  • Предоставление API для получения статистики и рейтингов

Сервис использует свою БД PostgreSQL для хранения статистических данных и предоставляет API для доступа к агрегированной информации.

AuthService

Сервис аутентификации и авторизации обеспечивает безопасность системы. Функционал включает:

  • Регистрация и управление пользователями с различными ролями
  • Аутентификация с использованием логина/пароля и JWT-токенов
  • Управление ролями и разрешениями пользователей
  • Проверка и валидация токенов для всех защищенных ресурсов
  • Обновление токенов с использованием механизма refresh tokens
  • Безопасное хранение паролей с использованием современных алгоритмов хеширования
  • Блокировка и разблокировка учетных записей при подозрительной активности
  • Логирование действий пользователей для аудита безопасности
  • Интеграция с внешними системами аутентификации (OAuth2, OpenID Connect)
  • Управление сессиями пользователей с возможностью принудительного завершения

Сервис хранит данные пользователей в своей БД PostgreSQL, соблюдая строгие требования к безопасности.

Admin-Panel

Веб-интерфейс для администрирования системы, разработанный на React и TypeScript. Подробное описание в разделе Admin-Panel.

📊 База данных

Система использует архитектурный подход "Database per Service", где каждый микросервис имеет свою собственную базу данных, что обеспечивает изоляцию данных и независимое масштабирование. Все базы данных используют PostgreSQL для хранения реляционных данных.

AuthService DB (auth-db)

Таблицы

  1. users

    • id (UUID) - первичный ключ
    • username (VARCHAR) - уникальное имя пользователя
    • password_hash (VARCHAR) - хеш пароля
    • email (VARCHAR) - уникальный email
    • first_name (VARCHAR) - имя пользователя
    • last_name (VARCHAR) - фамилия пользователя
    • role (ENUM) - роль пользователя (ADMIN, MODERATOR, READER)
    • active (BOOLEAN) - статус активации
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления
    • last_login_at (TIMESTAMP) - дата последнего входа
  2. refresh_tokens

    • id (UUID) - первичный ключ
    • user_id (UUID) - внешний ключ к users.id
    • token (VARCHAR) - токен обновления
    • expires_at (TIMESTAMP) - срок действия токена
    • created_at (TIMESTAMP) - дата создания
    • revoked (BOOLEAN) - статус отзыва токена
    • revoked_reason (VARCHAR) - причина отзыва токена (если есть)
  3. permissions

    • id (UUID) - первичный ключ
    • name (VARCHAR) - название разрешения
    • description (TEXT) - описание разрешения
  4. role_permissions

    • role (ENUM) - роль пользователя
    • permission_id (UUID) - внешний ключ к permissions.id
    • PRIMARY KEY (role, permission_id)
  5. user_activity_log

    • id (UUID) - первичный ключ
    • user_id (UUID) - внешний ключ к users.id
    • activity_type (VARCHAR) - тип активности
    • description (TEXT) - описание действия
    • ip_address (VARCHAR) - IP-адрес
    • user_agent (VARCHAR) - информация о браузере
    • created_at (TIMESTAMP) - дата и время активности

ImageStorageService DB (storage-db)

Таблицы

  1. images

    • id (UUID) - первичный ключ
    • user_id (UUID) - идентификатор пользователя-владельца
    • filename (VARCHAR) - оригинальное имя файла
    • storage_path (VARCHAR) - путь хранения в MinIO
    • mime_type (VARCHAR) - MIME-тип изображения
    • size_bytes (BIGINT) - размер в байтах
    • width (INT) - ширина изображения в пикселях
    • height (INT) - высота изображения в пикселях
    • description (TEXT) - описание изображения
    • is_public (BOOLEAN) - флаг публичного доступа
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления
    • deleted_at (TIMESTAMP) - дата логического удаления (NULL для активных)
  2. image_versions

    • id (UUID) - первичный ключ
    • image_id (UUID) - внешний ключ к images.id
    • version_type (ENUM) - тип версии (ORIGINAL, COMPRESSED, THUMBNAIL)
    • storage_path (VARCHAR) - путь хранения в MinIO
    • mime_type (VARCHAR) - MIME-тип версии изображения
    • size_bytes (BIGINT) - размер в байтах
    • width (INT) - ширина изображения в пикселях
    • height (INT) - высота изображения в пикселях
    • compression_quality (INT) - уровень качества сжатия (0-100)
    • created_at (TIMESTAMP) - дата создания
  3. image_categories

    • id (UUID) - первичный ключ
    • name (VARCHAR) - название категории
    • description (TEXT) - описание категории
    • parent_id (UUID) - внешний ключ к image_categories.id (для иерархии)
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления
  4. image_category_mapping

    • image_id (UUID) - внешний ключ к images.id
    • category_id (UUID) - внешний ключ к image_categories.id
    • PRIMARY KEY (image_id, category_id)
  5. image_tags

    • id (UUID) - первичный ключ
    • name (VARCHAR) - название тега
    • created_at (TIMESTAMP) - дата создания
  6. image_tag_mapping

    • image_id (UUID) - внешний ключ к images.id
    • tag_id (UUID) - внешний ключ к image_tags.id
    • PRIMARY KEY (image_id, tag_id)
  7. manga

    • id (UUID) - первичный ключ
    • title (VARCHAR) - название манги
    • description (TEXT) - описание манги
    • author (VARCHAR) - автор манги
    • artist (VARCHAR) - художник манги
    • status (ENUM) - статус (ONGOING, COMPLETED, HIATUS, CANCELED)
    • cover_image_id (UUID) - внешний ключ к images.id (для обложки)
    • published (BOOLEAN) - флаг публикации
    • view_count (BIGINT) - счетчик просмотров
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления
    • genres (VARCHAR) - жанры, разделенные запятыми
  8. manga_volumes

    • id (UUID) - первичный ключ
    • manga_id (UUID) - внешний ключ к manga.id
    • volume_number (INT) - номер тома
    • title (VARCHAR) - название тома
    • cover_image_id (UUID) - внешний ключ к images.id (для обложки)
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления
  9. manga_chapters

    • id (UUID) - первичный ключ
    • volume_id (UUID) - внешний ключ к manga_volumes.id
    • chapter_number (DECIMAL) - номер главы
    • title (VARCHAR) - название главы
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления
    • page_count (INT) - количество страниц
  10. manga_pages

    • id (UUID) - первичный ключ
    • chapter_id (UUID) - внешний ключ к manga_chapters.id
    • image_id (UUID) - внешний ключ к images.id
    • page_number (INT) - номер страницы
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления

CompressionService DB (compression-db)

Таблицы

  1. compression_tasks

    • id (UUID) - первичный ключ
    • image_id (UUID) - идентификатор изображения
    • status (ENUM) - статус задачи (PENDING, PROCESSING, COMPLETED, FAILED)
    • compression_type (ENUM) - тип сжатия (WEBP, JPEG, PNG, AVIF)
    • quality (INT) - уровень качества (0-100)
    • original_size_bytes (BIGINT) - размер оригинала в байтах
    • compressed_size_bytes (BIGINT) - размер после сжатия в байтах
    • compression_ratio (DECIMAL) - коэффициент сжатия
    • error_message (TEXT) - сообщение об ошибке (если есть)
    • started_at (TIMESTAMP) - дата начала обработки
    • completed_at (TIMESTAMP) - дата завершения обработки
    • created_at (TIMESTAMP) - дата создания задачи
    • priority (INT) - приоритет задачи (0-10)
  2. compression_settings

    • id (UUID) - первичный ключ
    • name (VARCHAR) - название настройки
    • compression_type (ENUM) - тип сжатия (WEBP, JPEG, PNG, AVIF)
    • quality (INT) - уровень качества (0-100)
    • resize_width (INT) - ширина для изменения размера (NULL для сохранения)
    • resize_height (INT) - высота для изменения размера (NULL для сохранения)
    • maintain_aspect_ratio (BOOLEAN) - сохранять пропорции
    • is_default (BOOLEAN) - настройка по умолчанию для типа
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления
  3. compression_presets

    • id (UUID) - первичный ключ
    • name (VARCHAR) - название пресета
    • description (TEXT) - описание пресета
    • settings_id (UUID) - внешний ключ к compression_settings.id
    • created_at (TIMESTAMP) - дата создания
    • updated_at (TIMESTAMP) - дата обновления

StatisticsRankingService DB (statistics-db)

Таблицы

  1. image_views

    • id (UUID) - первичный ключ
    • image_id (UUID) - идентификатор изображения
    • user_id (UUID) - идентификатор пользователя (NULL для анонимных)
    • view_date (TIMESTAMP) - дата и время просмотра
    • ip_hash (VARCHAR) - хеш IP-адреса (для анонимной аналитики)
    • user_agent (VARCHAR) - информация о браузере
    • referer (VARCHAR) - источник перехода
  2. image_downloads

    • id (UUID) - первичный ключ
    • image_id (UUID) - идентификатор изображения
    • user_id (UUID) - идентификатор пользователя (NULL для анонимных)
    • version_type (ENUM) - тип версии (ORIGINAL, COMPRESSED, THUMBNAIL)
    • download_date (TIMESTAMP) - дата и время скачивания
    • ip_hash (VARCHAR) - хеш IP-адреса (для анонимной аналитики)
    • user_agent (VARCHAR) - информация о браузере
  3. manga_views

    • id (UUID) - первичный ключ
    • manga_id (UUID) - идентификатор манги
    • chapter_id (UUID) - идентификатор главы (может быть NULL)
    • user_id (UUID) - идентификатор пользователя (NULL для анонимных)
    • view_date (TIMESTAMP) - дата и время просмотра
    • ip_hash (VARCHAR) - хеш IP-адреса (для анонимной аналитики)
    • pages_viewed (INT) - количество просмотренных страниц
    • time_spent_seconds (INT) - время, проведенное на странице
  4. daily_statistics

    • id (UUID) - первичный ключ
    • date (DATE) - дата статистики
    • image_views_count (INT) - количество просмотров изображений
    • image_downloads_count (INT) - количество скачиваний изображений
    • manga_views_count (INT) - количество просмотров манги
    • new_users_count (INT) - количество новых пользователей
    • total_compression_bytes_saved (BIGINT) - объем сэкономленного места
    • average_compression_ratio (DECIMAL) - средний коэффициент сжатия
  5. popular_items

    • id (UUID) - первичный ключ
    • item_id (UUID) - идентификатор элемента (изображение или манга)
    • item_type (ENUM) - тип элемента (IMAGE, MANGA, CHAPTER)
    • date (DATE) - дата
    • views_count (INT) - количество просмотров
    • downloads_count (INT) - количество скачиваний (для изображений)
    • rank_position (INT) - позиция в рейтинге

📱 Admin-Panel

Admin-Panel представляет собой современное React-приложение для управления всеми аспектами системы CompressRankSystem. Реализованное с использованием TypeScript и Material UI, приложение обеспечивает интуитивный пользовательский интерфейс для администраторов системы.

Ключевые возможности Admin-Panel:

Управление контентом

  • Управление изображениями

    • Просмотр списка всех изображений с фильтрацией и сортировкой
    • Загрузка новых изображений с предварительным просмотром
    • Редактирование метаданных изображений (название, описание, теги, категории)
    • Просмотр детальной информации об изображении (размер, формат, разрешение)
    • Удаление изображений с подтверждением
    • Проверка статуса сжатия и компрессии
  • Управление мангой

    • Создание и редактирование манги с полным описанием
    • Организация структуры манги по томам, главам и страницам
    • Загрузка страниц манги с автоматической нумерацией
    • Изменение порядка страниц с интерфейсом drag-and-drop
    • Управление обложками для манги и томов
    • Публикация и снятие с публикации манги

Управление пользователями

  • Управление пользователями

    • Просмотр списка всех пользователей с фильтрацией по ролям
    • Создание новых пользователей с назначением ролей
    • Редактирование информации о пользователях
    • Блокировка и разблокировка пользователей
    • Сброс паролей пользователей
    • Просмотр активности пользователей
  • Управление ролями и правами

    • Просмотр существующих ролей в системе
    • Настройка прав доступа для каждой роли
    • Создание пользовательских ролей с выборочными правами

Настройки системы

  • Системные настройки

    • Настройка параметров сжатия изображений
    • Управление категориями изображений
    • Установка ограничений на размеры загружаемых файлов
    • Настройка квот хранения для пользователей
    • Управление настройками безопасности
  • Мониторинг и статистика

    • Просмотр общей статистики системы на главной панели
    • Детальная статистика по просмотрам и загрузкам
    • Графики популярности контента по времени
    • Анализ эффективности сжатия изображений
    • Отчеты по активности пользователей

Особенности дизайна и пользовательского опыта:

  1. Отзывчивый дизайн

    • Адаптация для мобильных устройств, планшетов и десктопов
    • Корректное отображение на экранах любого размера
  2. Темная и светлая темы

    • Автоматическое определение системных предпочтений
    • Возможность ручного переключения темы
    • Сохранение выбора в локальном хранилище
  3. Оптимизация производительности

    • Ленивая загрузка компонентов (React.lazy)
    • Мемоизация компонентов для снижения избыточных рендеров
    • Виртуализация списков для эффективного отображения больших наборов данных
    • Оптимизированная загрузка изображений с lazy loading
  4. Удобство использования

    • Интуитивно понятный интерфейс с подсказками
    • Drag-and-drop для загрузки файлов и изменения порядка
    • Контекстные меню для быстрого доступа к часто используемым функциям
    • Клавиатурные сочетания для повышения эффективности работы
    • Уведомления об успешных действиях и ошибках
  5. Безопасность

    • Защита от CSRF-атак
    • Проверка ролей и прав на стороне клиента
    • Защищенные маршруты с редиректом на страницу входа
    • Автоматический выход при истечении сессии
    • Подтверждение критических действий

Технологическая реализация:

  • Архитектура приложения

    • Component-Based Architecture для переиспользуемых элементов UI
    • Context API для глобального состояния (тема, аутентификация)
    • React Router для маршрутизации и навигации
    • Hooks для управления состоянием и побочными эффектами
  • Управление состоянием

    • React Hooks (useState, useEffect, useContext) для локального состояния
    • Контекст для глобально доступных данных (AuthContext)
    • Использование кастомных хуков для инкапсуляции логики
  • API-взаимодействие

    • Централизованные сервисы для взаимодействия с бэкендом
    • Axios для HTTP-запросов с перехватчиками для токенов и ошибок
    • Абстракция API в отдельном слое сервисов
    • Кеширование запросов для оптимизации производительности
  • Обработка форм

    • React Hook Form для эффективного управления формами
    • Yup для валидации данных
    • Контролируемые и неконтролируемые компоненты в зависимости от сценария
  • Стилизация

    • Material UI как библиотека компонентов
    • ThemeProvider для глобального управления темой
    • CSS-in-JS с использованием styled-components или emotion
    • Адаптивная верстка с использованием Grid и Flexbox

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

Предварительные требования

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

  1. Клонировать репозиторий
git clone https://github.com/your-username/CompressRankSystem.git
cd CompressRankSystem
  1. Запуск с помощью Docker Compose
docker-compose up -d

Это запустит все микросервисы, базы данных и дополнительные сервисы в контейнерах Docker.

  1. Проверка работоспособности
curl http://localhost:8082/api/system/health
  1. Доступ к административной панели

Откройте в браузере: http://localhost:3000

Запуск для разработки

Бэкенд

# Запуск ApiGateway
cd ApiGatewayCompressionRankSystem
./gradlew bootRun

# Запуск ImageStorageService
cd ../ImageStorageService
./gradlew bootRun

# ... и так далее для каждого сервиса

Фронтенд

cd admin-panel
npm install
npm start

📁 Структура проекта

CompressRankSystem/
│
├── ApiGatewayCompressionRankSystem/ # API Gateway
│
├── ImageStorageService/             # Сервис хранения изображений
│
├── CompressionService/              # Сервис сжатия изображений
│
├── StatisticsRankingService/        # Сервис статистики и рейтингов
│
├── AuthService/                     # Сервис аутентификации
│
├── admin-panel/                     # Административная панель (React)
│
├── webp_binaries/                   # Бинарные файлы WebP для сжатия
│
├── data/                            # Директория для хранения данных
│
├── docker-compose.yml               # Конфигурация Docker Compose
│
└── README.md                        # Документация проекта

📡 API

Система предоставляет REST API для управления изображениями, сжатия и получения статистики.

Основные API эндпоинты

Сервис хранения изображений

  • GET /api/images - Получение списка всех изображений
  • GET /api/images/{id} - Получение изображения по ID
  • GET /api/images/{id}/metadata - Получение метаданных изображения
  • POST /api/images - Загрузка нового изображения
  • DELETE /api/images/{id} - Удаление изображения
  • GET /api/images/statistics - Получение статистики по изображениям
  • GET /api/images/{id}/statistics - Получение статистики по конкретному изображению

Сервис сжатия изображений

  • POST /api/compression/{id} - Сжатие изображения
  • POST /api/compression/{id}/restore - Восстановление оригинала изображения
  • GET /api/compression/{id}/original-size - Получение размера оригинального изображения

API Gateway

  • GET /api/system/health - Проверка состояния системы
  • GET /api/system/info - Информация о системе и версиях
  • GET /api/docs - Документация API
  • GET /api/metrics/aggregated - Агрегированные метрики по всем сервисам

Документация API

Подробная документация API доступна по адресу:

🛠️ Разработка

Добавление нового микросервиса

  1. Создайте новый проект Spring Boot
  2. Добавьте необходимые зависимости для работы с Kafka
  3. Реализуйте бизнес-логику
  4. Создайте Dockerfile для сервиса
  5. Добавьте сервис в docker-compose.yml

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

# Запуск всех тестов
./gradlew test

# Запуск тестов для конкретного сервиса
cd ImageStorageService
./gradlew test

🚢 Развертывание

Docker Compose

Для локального развертывания используйте Docker Compose:

docker-compose up -d

Kubernetes (опционально)

Для развертывания в Kubernetes можно использовать файлы манифестов из директории k8s/:

kubectl apply -f k8s/

📜 Лицензия

Этот проект распространяется под лицензией Apache 2.0. Подробности см. в файле LICENSE.

👥 Авторы

  • ShadowShift Studio - Начальная работа - ShadowShift

🙏 Благодарности

  • Команда Spring Boot и Spring Cloud за замечательные фреймворки
  • Сообщество WebP за технологию сжатия изображений
  • Всем контрибьюторам, которые помогают развивать проект

© 2025 ShadowShift Studio

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors