Skip to content

AnnushkaStark/test_task_ano-csim

Repository files navigation

test_task_ano-csim

Реализация сервиса по работе с задачами

Описание

Необходимо разработать сервис для управления задачами с следующими функциональными требованиями:

  1. Создание задач через REST API

  2. Создание задач через очереди сообщений (RabbitMQ или Kafka)

  3. Реализация статусной модели для задач:

    • Новая задача

    • В процессе работы

    • Завершено успешно

    • Ошибка

  4. Эмуляция процесса обработки задачи

Технические требования

  1. Язык программирования: Python

  2. База данных: PostgreSQL

  3. Очередь сообщений: RabbitMQ или Kafka

  4. REST API: Реализовать с использованием соответствующего фреймворка (Flask, FastApi, Django)

  5. Документация API: Swagger/OpenAPI

  6. Контейнеризация: Docker

Задачи

  1. Разработать структуру базы данных для хранения задач и их статусов

  2. Реализовать REST API с следующими эндпоинтами:

     * POST /tasks - создание новой задачи
    
     * GET /tasks/{id} - получение информации о задаче
    
     * GET /tasks - получение списка задач с возможностью фильтрации по статусу
    
  3. Реализовать создание задач через очередь сообщений

  4. Разработать worker для обработки задач

    • Получение задачи из очереди
    • Изменение статуса задачи на "В процессе работы"
    • Эмуляция выполнения задачи (например, случайная задержка 5-10 секунд)
    • Изменение статуса задачи на "Завершено успешно" или "Ошибка" (с некоторой вероятностью)
  5. Реализовать логирование процесса обработки задач

  6. Написать unit-тесты для ключевых компонентов

  7. Подготовить Docker Compose файл для запуска всех компонентов системы

Реализация

Использованный стек

  1. FastAPI - эндпойнты
  2. SQLAlchemy - орм
  3. Alembic - миграции
  4. PostgreSQL - для базы данных
  5. RabbitMQ - брокер очередей
  6. aio_pika - для работа с очередью (публикация и обработка задач)
  7. pytest_asyncio - тестирование проекта
  8. Docker, docker-compose - запуск всех компонетов системы

Доступные энпойнты

  1. Создание задачи
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

  1. Получение задачи по uid:

GET

http://127.0.0.1:8000/task_service/api/v1/task/uid задачи/
  1. Получение всех задач

GET

http://109.71.247.92:8000/task_service/api/v1/task/

Доступна филтрация по статусу и пагинация

  1. Иммитация работы 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#
  1. Запуск с тестами
  • В корневой директории проекта создать виртуальное окружение для 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
  • Запустить проект полностью в докер (см "Запуск проекта без тестировнаия")

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published