Skip to content

REST API сервиc для поиска ближайших машин к грузам.

Notifications You must be signed in to change notification settings

alexpro2022/cargo_transportation-FastAPI

Repository files navigation

Сервис поиска ближайших машин для перевозки грузов

Cargo Test Suite codecov

REST API сервиc для поиска ближайших машин к грузам.

Тестовое задание


Оглавление


Технологии

Подробнее

Python APScheduler Pytest Pytest-asyncio FastAPI Pydantic Uvicorn PostgreSQL asyncpg SQLAlchemy Alembic docker_hub docker_compose Nginx

⬆️Оглавление


Описание работы

При запуске приложения БД инициализируется следующими данными:

  1. Списком уникальных локаций, представленых в csv файле "uszips.csv". Каждая локация содержит в себе следующие характеристики:
    • город;
    • штат;
    • почтовый индекс (zip);
    • широта;
    • долгота.
  2. Списком из 20 машин. Каждая машина - включает следующие характеристики:
    • уникальный номер (цифра от 1000 до 9999 + случайная заглавная буква английского алфавита в конце, пример: "1234A", "2534B", "9999Z")
    • текущая локация;
    • грузоподъемность (1-1000). При создании машин по умолчанию локация каждой машины заполняется случайным образом;

Сервис поддерживает следующие базовые функции:

Уровень 1:

  • Получение информации о конкретной локации по ID.
  • Получение списка машин.
  • Редактирование машины по ID (локация (определяется по введенному zip-коду));
  • Создание нового груза (характеристики локаций pick-up, delivery определяются по введенному zip-коду);
  • Получение списка грузов (локации pick-up, delivery, количество ближайших машин (с подходящей грузоподъемностью) до груза);
  • Получение информации о конкретном грузе по ID (локации pick-up, delivery, вес, описание, список номеров ВСЕХ машин (с подходящей грузоподъемностью) с расстоянием до выбранного груза);
  • Редактирование груза по ID (вес, описание);
  • Удаление груза по ID.

Уровень 2:

  • Фильтр списка грузов (вес, мили ближайших машин до грузов);
  • Автоматическое обновление локаций всех машин раз в 3 минуты (локация меняется на другую случайную).

⬆️Оглавление


Установка и запуск:

Предварительные условия

Предполагается, что пользователь установил Docker и Docker Compose на локальной машине или на удаленном сервере, где проект будет запускаться в контейнерах. Проверить наличие можно выполнив команды:

docker --version && docker-compose --version

Локальный запуск: Docker Compose
  1. Клонируйте репозиторий с GitHub и введите данные для переменных окружения (значения даны для примера, но их можно оставить):
git clone https://github.com/alexpro2022/cargo_transportation-FastAPI.git && \
cd cargo_transportation-FastAPI && \
cp env_example .env && \
nano .env
  1. Из корневой директории проекта выполните команду:
docker compose -f infra/local/docker-compose.yml up -d --build

Проект будет развернут в трех docker-контейнерах (db, web, nginx) по адресу http://localhost. Администрирование приложения может быть осуществлено через Swagger доступный по адресу http://localhost/docs .

  1. Остановить docker и удалить контейнеры можно командой из корневой директории проекта:
docker compose -f infra/local/docker-compose.yml down

Если также необходимо удалить том базы данных:

docker compose -f infra/local/docker-compose.yml down -v

Для создания тестовых грузов можно воспользоваться следующими данными:

{
  "delivery_zip": "00602",
  "current_zip": "00601",
  "description": "description",
  "weight": 100
}
{
  "delivery_zip": "33556",
  "current_zip": "15049",
  "description": "description",
  "weight": 500
}

⬆️Оглавление


Удаление:

Для удаления проекта выполните следующие действия:

cd .. && rm -fr cargo_transportation-FastAPI

⬆️Оглавление


Автор

Aleksei Proskuriakov

⬆️В начало

About

REST API сервиc для поиска ближайших машин к грузам.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published