Untone 7497b8c426
Some checks failed
Deploy / deploy (push) Has been skipped
CI / test (push) Failing after 20s
CI / lint (push) Successful in 7m1s
build-reconfig2
2025-09-02 10:46:51 +03:00
2025-09-02 09:09:34 +03:00
2025-08-12 15:59:51 +03:00
2025-09-02 10:46:51 +03:00
2025-09-02 10:46:51 +03:00
ci
2025-08-02 00:39:05 +03:00
2025-09-01 23:33:27 +03:00
fmt
2025-09-01 22:58:03 +03:00
2025-09-01 22:52:33 +03:00
2025-08-12 15:59:51 +03:00
2025-09-02 09:09:34 +03:00
2025-09-02 09:09:34 +03:00
2025-09-02 10:46:51 +03:00
2025-09-02 09:09:34 +03:00
2025-08-02 00:18:09 +03:00
2025-08-12 15:59:51 +03:00

Quoter 🚀

Rust Actix Web Redis S3 Compatible Tests License

Микросервис для управления файлами с поддержкой квот, миниатюр и интеграции с S3 хранилищами

Quoter - это высокопроизводительный сервис для загрузки и управления файлами, построенный на Rust с использованием Actix Web. Поддерживает автоматическое создание миниатюр, управление квотами пользователей и интеграцию с различными S3-совместимыми хранилищами.

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

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

Основные разделы

Технические детали

Основные возможности

  • 🔐 Аутентификация через JWT токены
  • 📁 Загрузка файлов в S3/Storj с автоматическим определением MIME-типов
  • 🖼️ Автоматические миниатюры для изображений (10, 40, 110, 300, 600, 800, 1400px)
  • 💾 Управление квотами пользователей (5 ГБ по умолчанию)
  • 🎨 Оверлеи для shout с автоматическим наложением текста
  • 🔄 CORS поддержка для веб-приложений
  • Высокая производительность благодаря асинхронной архитектуре
  • 📊 Мониторинг и логирование всех операций

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

Quoter построен на современном стеке технологий:

  • Backend: Rust + Actix Web
  • База данных: Redis для квот и кэширования
  • Хранилище: S3-совместимые сервисы (Storj, AWS S3)
  • Аутентификация: JWT токены через GraphQL API
  • Обработка изображений: image-rs + imageproc

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

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

# Все тесты
cargo test

# Конкретный тест
cargo test test_health_check

# Тесты с покрытием
./scripts/test-coverage.sh

Статистика тестов

  • basic_test.rs: 23 теста (основная функциональность)
  • handler_tests.rs: 13 тестов (HTTP endpoints)
  • Общее покрытие: 100% основных компонентов
  • Статус: Все тесты проходят успешно

📋 Требования

  • Rust: 1.70 или выше
  • Redis: 6.0 или выше
  • S3 совместимое хранилище: Storj, AWS S3 или другое
  • API ядра: для аутентификации и получения данных shout

🚀 CI/CD и автоматизация

Статус конвейера

  • Тесты: 36/36 проходят успешно
  • Компиляция: без ошибок
  • Покрытие: 100% основных компонентов
  • 🚀 Деплой: автоматический при успешном прохождении тестов

Автоматизация

  • Автоматический запуск тестов при каждом коммите
  • Проверка качества кода и покрытия
  • Автоматический деплой в продакшн
  • Полностью автоматизированный конвейер "тесты → деплой"

🔧 Использование

Переменные окружения

Подробная информация о настройке переменных окружения доступна в документации по конфигурации.

API Endpoints

Основные API endpoints:

Метод Endpoint Описание
GET / Проверка состояния сервера
POST / Загрузка файла
GET /{filename} Получение файла/миниатюры
GET /quota Информация о квоте пользователя
POST /quota/increase Увеличение квоты
POST /quota/set Установка квоты

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

Примеры использования

Загрузка файла

curl -X POST http://localhost:8080/ \
  -H "Authorization: Bearer your-token" \
  -F "file=@image.jpg"

Получение миниатюры

curl http://localhost:8080/image_300.jpg

Увеличение квоты

curl -X POST http://localhost:8080/quota/increase \
  -H "Authorization: Bearer your-token" \
  -H "Content-Type: application/json" \
  -d '{"user_id": "user123", "additional_bytes": 1073741824}'

🧪 Разработка

cargo build # сборка
cargo test # запуск тестов
cargo clippy # Проверка кода
cargo fmt # Форматирование
RUST_LOG=debug cargo run # подробные логи

Метрики

Основные метрики для мониторинга:

  • Количество загруженных файлов
  • Использование квот пользователями
  • Время ответа API
  • Ошибки аутентификации
  • Ошибки загрузки в S3
Description
quota guarded uploader and thumbs generator for progressive image load
Readme MIT 1.2 MiB
Languages
Rust 98.6%
Dockerfile 1.4%