2025-08-02 00:18:09 +03:00
# Quoter 🚀
2023-10-03 16:29:31 +03:00
2025-08-02 00:18:09 +03:00
[](https://www.rust-lang.org/)
[](https://actix.rs/)
[](https://redis.io/)
[](https://aws.amazon.com/s3/)
2025-08-12 15:59:51 +03:00
[](https://dev.discours.io/discours.io/quoter)
2025-08-02 00:18:09 +03:00
[](LICENSE)
2023-10-03 16:29:31 +03:00
2025-08-02 00:18:09 +03:00
> Микросервис для управления файлами с поддержкой квот, миниатюр и интеграции с S3 хранилищами
2024-08-30 21:06:41 +03:00
2025-08-02 00:18:09 +03:00
Quoter - это высокопроизводительный сервис для загрузки и управления файлами, построенный на Rust с использованием Actix Web. Поддерживает автоматическое создание миниатюр, управление квотами пользователей и интеграцию с различными S3-совместимыми хранилищами.
2024-08-30 21:06:41 +03:00
2025-08-02 00:18:09 +03:00
## 📖 Документация
2023-10-03 16:29:31 +03:00
2025-08-02 00:18:09 +03:00
Подробная документация доступна в папке [`docs/` ](./docs/ ):
2023-10-19 17:43:00 +03:00
2025-08-02 00:18:09 +03:00
### Основные разделы
- [📚 Оглавление ](./docs/README.md ) - Полная структура документации
- [🔧 API Reference ](./docs/api-reference.md ) - Документация API
- [⚙️ Конфигурация ](./docs/configuration.md ) - Настройка переменных окружения
- [🚀 Развертывание ](./docs/deployment.md ) - Инструкции по развертыванию
- [📊 Мониторинг ](./docs/monitoring.md ) - Логирование и мониторинг
2023-10-19 17:43:00 +03:00
2025-08-02 00:18:09 +03:00
### Технические детали
- [🏗️ Архитектура ](./docs/architecture.md ) - Техническая архитектура системы
- [🔍 Как это работает ](./docs/how-it-works.md ) - Подробное описание процессов
2025-08-12 15:59:51 +03:00
- [🧪 Тестирование ](./docs/testing.md ) - Полное покрытие тестами (36 тестов)
2025-08-02 00:18:09 +03:00
- [💻 Разработка ](./docs/development.md ) - Настройка среды разработки
- [🤝 Contributing ](./docs/contributing.md ) - Руководство для контрибьюторов
2023-10-16 17:44:19 +03:00
2025-08-02 00:18:09 +03:00
## ✨ Основные возможности
2023-10-19 17:43:00 +03:00
2025-08-02 00:18:09 +03:00
- 🔐 **Аутентификация** через JWT токены
- 📁 **Загрузка файлов** в S3/Storj с автоматическим определением MIME-типов
- 🖼️ **Автоматические миниатюры** для изображений (10, 40, 110, 300, 600, 800, 1400px)
- 💾 **Управление квотами** пользователей (5 ГБ по умолчанию)
- 🎨 **Оверлеи для shout** с автоматическим наложением текста
- 🔄 **CORS поддержка** для веб-приложений
- ⚡ **Высокая производительность** благодаря асинхронной архитектуре
- 📊 **Мониторинг и логирование** всех операций
2023-10-19 17:43:00 +03:00
2025-08-02 00:18:09 +03:00
## 🏗️ Архитектура
2023-10-19 17:43:00 +03:00
2025-08-02 00:18:09 +03:00
Quoter построен на современном стеке технологий:
2023-10-16 17:44:19 +03:00
2025-08-02 00:18:09 +03:00
- **Backend**: Rust + Actix Web
- **База данных**: Redis для квот и кэширования
- **Хранилище**: S3-совместимые сервисы (Storj, AWS S3)
- **Аутентификация**: JWT токены через GraphQL API
- **Обработка изображений**: image-rs + imageproc
2024-10-23 20:06:34 +03:00
2025-08-12 15:59:51 +03:00
## 🧪 Тестирование
### Запуск тестов
```bash
# В с е тесты
cargo test
# Конкретный тест
cargo test test_health_check
# Тесты с покрытием
./scripts/test-coverage.sh
```
### Статистика тестов
- **basic_test.rs:** 23 теста (основная функциональность)
- **handler_tests.rs:** 13 тестов (HTTP endpoints)
- **Общее покрытие:** 100% основных компонентов
- **Статус:** В с е тесты проходят успешно
2025-08-02 00:18:09 +03:00
## 📋 Требования
2024-10-02 18:13:12 +03:00
2025-08-02 00:18:09 +03:00
- **Rust**: 1.70 или выше
- **Redis**: 6.0 или выше
- **S3 совместимое хранилище**: Storj, AWS S3 или другое
- **API ядра**: для аутентификации и получения данных shout
2024-10-02 18:13:12 +03:00
2025-08-12 15:59:51 +03:00
## 🚀 CI/CD и автоматизация
### Статус конвейера
- ✅ **Тесты:** 36/36 проходят успешно
- ✅ **Компиляция:** без ошибок
- ✅ **Покрытие:** 100% основных компонентов
- 🚀 **Деплой:** автоматический при успешном прохождении тестов
### Автоматизация
- Автоматический запуск тестов при каждом коммите
- Проверка качества кода и покрытия
- Автоматический деплой в продакшн
- Полностью автоматизированный конвейер "тесты → деплой"
2025-08-02 00:18:09 +03:00
## 🔧 Использование
### Переменные окружения
Подробная информация о настройке переменных окружения доступна в [документации по конфигурации ](./docs/configuration.md ).
### API Endpoints
Основные API endpoints:
| Метод | Endpoint | Описание |
|-------|----------|----------|
| `GET` | `/` | Проверка состояния сервера |
| `POST` | `/` | Загрузка файла |
| `GET` | `/{filename}` | Получение файла/миниатюры |
| `GET` | `/quota` | Информация о квоте пользователя |
| `POST` | `/quota/increase` | Увеличение квоты |
| `POST` | `/quota/set` | Установка квоты |
Подробная документация API доступна в [API Reference ](./docs/api-reference.md ).
### Примеры использования
#### Загрузка файла
```bash
curl -X POST http://localhost:8080/ \
-H "Authorization: Bearer your-token" \
-F "file=@image .jpg"
```
#### Получение миниатюры
```bash
curl http://localhost:8080/image_300.jpg
```
#### Увеличение квоты
```bash
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}'
```
## 🧪 Разработка
```bash
cargo build # сборка
cargo test # запуск тестов
cargo clippy # Проверка кода
cargo fmt # Форматирование
RUST_LOG=debug cargo run # подробные логи
```
### Метрики
Основные метрики для мониторинга:
- Количество загруженных файлов
- Использование квот пользователями
- Время ответа API
- Ошибки аутентификации
- Ошибки загрузки в S3