Production-ready Task Management API с современной layered архитектурой, async/await, JWT аутентификацией и comprehensive тестированием.
- 🏗️ Layered Architecture — четкое разделение на models, repositories, services и API
- ⚡ Async/Await — полностью асинхронная архитектура с SQLAlchemy 2.0 и FastAPI
- 🔄 Generic Repository Pattern — переиспользуемый код для работы с базой данных
- 💉 Dependency Injection — все зависимости через конструкторы и FastAPI Depends
- 🧪 Comprehensive Testing — unit и integration тесты с pytest и покрытием кода
- 🐳 Docker & Docker Compose — контейнеризация для легкого развертывания
- 🔄 CI/CD Pipeline — автоматизированное тестирование и деплой через GitHub Actions
- 📊 Structured Logging — JSON-формат логов для удобного анализа
- 🗄️ Database Migrations — версионирование схемы через Alembic
- 🔐 Security — JWT аутентификация, rate limiting, CORS protection
- 📈 Monitoring — Prometheus метрики и health checks
- Python 3.11+
- PostgreSQL 13+
- Redis 6+
- Docker & Docker Compose (для контейнеризации)
# Клонирование репозитория
git clone https://github.com/Genocide12/task-manager.git
cd task-manager
# Настройка окружения
cp .env.example .env
# Отредактируйте .env файл с вашими настройками
# Запуск всех сервисов
make docker-run
# или
docker-compose -f docker/docker-compose.yml up --build
# Клонирование и настройка
git clone https://github.com/Genocide12/task-manager.git
cd task-manager
# Создание виртуального окружения
python -m venv venv
source venv/bin/activate # Linux/Mac
# или
venv\Scripts\activate # Windows
# Установка зависимостей
make install
# или
pip install -r requirements.txt -r requirements-dev.txt
# Настройка окружения
cp .env.example .env
# Отредактируйте DATABASE_URL и другие параметры
# Запуск PostgreSQL и Redis (через Docker)
docker run -d --name postgres \
-e POSTGRES_DB=taskdb \
-e POSTGRES_USER=taskuser \
-e POSTGRES_PASSWORD=taskpass \
-p 5432:5432 \
postgres:15-alpine
docker run -d --name redis \
-p 6379:6379 \
redis:7-alpine
# Применение миграций
make migrate
# или
alembic upgrade head
# Запуск сервера разработки
make dev
# или
uvicorn src.task_manager.main:app --reload --host 0.0.0.0 --port 8000
Создайте файл .env
на основе .env.example
:
# Database
DATABASE_URL=postgresql+asyncpg://taskuser:taskpass@localhost:5432/taskdb
DATABASE_POOL_SIZE=10
DATABASE_MAX_OVERFLOW=20
# Security
SECRET_KEY=your-super-secret-key-change-in-production
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
REFRESH_TOKEN_EXPIRE_DAYS=7
# CORS & Security
ALLOWED_HOSTS=["localhost", "127.0.0.1"]
CORS_ORIGINS=["http://localhost:3000", "http://localhost:8080"]
# Redis
REDIS_URL=redis://localhost:6379
# Application
DEBUG=true
LOG_LEVEL=INFO
# Rate Limiting
RATE_LIMIT_REQUESTS=100
RATE_LIMIT_WINDOW=3600
После запуска сервера:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- Health Check: http://localhost:8000/health
- Metrics: http://localhost:8000/metrics
# Запуск всех тестов
make test
# Запуск с покрытием кода
pytest tests/ -v --cov=src --cov-report=html
# Запуск только unit тестов
pytest tests/unit/
# Запуск только integration тестов
pytest tests/integration/
# Показать все доступные команды
make help
# Линтинг и форматирование
make lint
make format
# Создание новой миграции
make create-migration message="Add new field"
# Очистка кэша
make clean
# Сборка Docker образа
make docker-build
task-manager/
├── .github/workflows/ # CI/CD пайплайны
├── src/task_manager/ # Основной код приложения
│ ├── api/ # API endpoints
│ ├── core/ # Основная логика (security, logging)
│ ├── models/ # SQLAlchemy модели
│ ├── repositories/ # Репозитории для работы с БД
│ ├── schemas/ # Pydantic схемы
│ ├── services/ # Бизнес-логика
│ └── main.py # Точка входа
├── tests/ # Тесты
│ ├── unit/ # Unit тесты
│ └── integration/ # Integration тесты
├── docker/ # Docker конфигурация
├── alembic/ # Миграции базы данных
└── requirements*.txt # Зависимости
API использует JWT токены для аутентификации:
# Регистрация пользователя
curl -X POST "http://localhost:8000/api/v1/users/register" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"username": "testuser",
"password": "securepassword123"
}'
# Авторизация
curl -X POST "http://localhost:8000/api/v1/auth/login" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=testuser&password=securepassword123"
# Использование токена
curl -X GET "http://localhost:8000/api/v1/tasks/" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
curl http://localhost:8000/health
curl http://localhost:8000/metrics
# Обновите .env для production
DEBUG=false
LOG_LEVEL=WARNING
SECRET_KEY=your-production-secret-key
ALLOWED_HOSTS=["yourdomain.com"]
CORS_ORIGINS=["https://yourdomain.com"]
# Соберите и запустите
docker-compose -f docker/docker-compose.prod.yml up -d
# Проверить занятые порты
netstat -tlnp | grep :8000
# Остановить все контейнеры
docker-compose down
# Пересоздать базу данных
docker-compose down -v
docker-compose up --build
# Сбросить миграции
alembic downgrade base
alembic upgrade head
MIT License - см. файл LICENSE
- Форкните проект
- Создайте feature ветку (
git checkout -b feature/AmazingFeature
) - Зафиксируйте изменения (
git commit -m 'Add some AmazingFeature'
) - Отправьте в ветку (
git push origin feature/AmazingFeature
) - Откройте Pull Request
Если у вас есть вопросы или проблемы:
- Создайте Issue
- Напишите в Discussions
⭐ Понравился проект? Поставьте звезду! ⭐