Необходимо разработать сервис для управления задачами с следующими функциональными требованиями:
-
Создание задач через REST API
-
Создание задач через очереди сообщений (RabbitMQ или Kafka)
-
Реализация статусной модели для задач:
-
Новая задача
-
В процессе работы
-
Завершено успешно
-
Ошибка
-
-
Эмуляция процесса обработки задачи
-
Язык программирования: Python
-
База данных: PostgreSQL
-
Очередь сообщений: RabbitMQ или Kafka
-
REST API: Реализовать с использованием соответствующего фреймворка (Flask, FastApi, Django)
-
Документация API: Swagger/OpenAPI
-
Контейнеризация: Docker
-
Разработать структуру базы данных для хранения задач и их статусов
-
Реализовать REST API с следующими эндпоинтами:
* POST /tasks - создание новой задачи * GET /tasks/{id} - получение информации о задаче * GET /tasks - получение списка задач с возможностью фильтрации по статусу -
Реализовать создание задач через очередь сообщений
-
Разработать worker для обработки задач
- Получение задачи из очереди
- Изменение статуса задачи на "В процессе работы"
- Эмуляция выполнения задачи (например, случайная задержка 5-10 секунд)
- Изменение статуса задачи на "Завершено успешно" или "Ошибка" (с некоторой вероятностью)
-
Реализовать логирование процесса обработки задач
-
Написать unit-тесты для ключевых компонентов
-
Подготовить Docker Compose файл для запуска всех компонентов системы
- FastAPI - эндпойнты
- SQLAlchemy - орм
- Alembic - миграции
- PostgreSQL - для базы данных
- RabbitMQ - брокер очередей
- aio_pika - для работа с очередью (публикация и обработка задач)
- pytest_asyncio - тестирование проекта
- Docker, docker-compose - запуск всех компонетов системы
- Создание задачи
http://127.0.0.1:8000/task_service/api/v1/task/
POST - Создание задачи (задача создается с дефолтным статусом "Cоздана" и публикуется в брокер в очередь Tasks)
После создание задачи публикацию в очереди можно проверить по url адресу:
http://127.0.0.1:15672/#/queues
Перед проверкой необходимо авторизоваться в веб интерфейсе RabbitMQ по url aдресу
http://127.0.0.1:15672/
Login: guest
Password: guest
- Получение задачи по uid:
GET
http://127.0.0.1:8000/task_service/api/v1/task/uid задачи/
- Получение всех задач
GET
http://109.71.247.92:8000/task_service/api/v1/task/
Доступна филтрация по статусу и пагинация
- Иммитация работы consumer
Для иммитации работы воркера (получение и обработка задачи) Добавлен энпонйт
http://109.71.247.92:8000/task_service/api/v1/worker/
GET - этот энпойнт принимает очередь которая создается при публикации задачи - получает из очереди задачи по id и иммитируя обработку задач изменяет их статус
- При получении из очереди стастус изменяется на "В процессе"
- При обработке рандомно на "Выполнено успешно" или "Ошибка"
Измененния можно посмотреть в энпонйте получения всех задач с филтрацией или без
Энпонйт запускает worker в отдельной асинхронной задаче
!!!Внимание!!!! ТК Очередь создается только при публикации задачи (в энпойнте создания). Работу энпонйта эмуляции воркера лучше проверять после создания одной или нескольких задач подряд
Создать в корневой директории файл .env и скопировать туда тестовые данные из .env.template
1 Запуск без тестов
В терминале ввести команду
docker-compose up --build
Сваггер будет доступен по адресу
http://127.0.0.1:8000/task_service/docs#
- Запуск с тестами
- В корневой директории проекта создать виртуальное окружение для Windows
python -m venv venv
для Linux
python3.11 -m venv venv
- Активировть окружение
для Windows
venv/Scripts/activate.ps1
для Linux
source venv/bin/activate
- Установить зависимости
pip install -r requirements.txt
- Запустить контейнеры в фоновом режиме
docker-compose up --build -d
- Сменить директорию
cd src
- Запустить тесты
pytest
- Bернуться в корневую диреторию
cd ..
- Опустить контейнеры
docker-cmpose down
- Удалить файл миграции из директории
src/alembic/versions
- Посмотреть список локальный вольюмов докер
docker volume ls
- Удалить локальные вольюмы
docker volume prune
- Удалить вольюм с базой данных
docker volume rm test_task_ano-csim_pgdata
- Запустить контейнеры в фоновом режиме
docker-compose up --build -d
- Сменить диреткторию
cd src
- Сделать новую миграцию
alembic revision --authogenerate -m "initial"
- Применить миграции
alembic upgrade head
- Вернуться в корневую директорию проекта
cd ..
- Опустить контейнеры
docker-compose down
- Запустить проект полностью в докер (см "Запуск проекта без тестировнаия")