Skip to content

Production-ready Task Management API with modern layered architecture, async/await, JWT authentication, and comprehensive testing

Notifications You must be signed in to change notification settings

Genocide12/task-manager

Repository files navigation

🚀 Task Manager API

Production-ready Task Management API с современной layered архитектурой, async/await, JWT аутентификацией и comprehensive тестированием.

Python FastAPI SQLAlchemy Docker Tests

✨ Особенности

  • 🏗️ 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 (для контейнеризации)

🚀 Быстрый запуск

Вариант 1: 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

Вариант 2: Локальная разработка

# Клонирование и настройка
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

📚 API Documentation

После запуска сервера:

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

# Запуск всех тестов
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"

📊 Мониторинг

Health Check

curl http://localhost:8000/health

Prometheus метрики

curl http://localhost:8000/metrics

🚢 Деплой

Production конфигурация

# Обновите .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

🤝 Вклад в проект

  1. Форкните проект
  2. Создайте feature ветку (git checkout -b feature/AmazingFeature)
  3. Зафиксируйте изменения (git commit -m 'Add some AmazingFeature')
  4. Отправьте в ветку (git push origin feature/AmazingFeature)
  5. Откройте Pull Request

📞 Поддержка

Если у вас есть вопросы или проблемы:


Понравился проект? Поставьте звезду!

About

Production-ready Task Management API with modern layered architecture, async/await, JWT authentication, and comprehensive testing

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages