REST API сервиc для поиска ближайших машин к грузам.
При запуске приложения БД инициализируется следующими данными:
- Списком уникальных локаций, представленых в csv файле "uszips.csv". Каждая локация содержит в себе следующие характеристики:
- город;
- штат;
- почтовый индекс (zip);
- широта;
- долгота.
- Списком из 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
- Клонируйте репозиторий с GitHub и введите данные для переменных окружения (значения даны для примера, но их можно оставить):
git clone https://github.com/alexpro2022/cargo_transportation-FastAPI.git && \
cd cargo_transportation-FastAPI && \
cp env_example .env && \
nano .env
- Из корневой директории проекта выполните команду:
docker compose -f infra/local/docker-compose.yml up -d --build
Проект будет развернут в трех docker-контейнерах (db, web, nginx) по адресу http://localhost. Администрирование приложения может быть осуществлено через Swagger доступный по адресу http://localhost/docs .
- Остановить 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