Code Monkey home page Code Monkey logo

vehicle_search's Introduction

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

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

◼Стек и требования:

  • Python (Django Rest Framework / FastAPI) на выбор.
  • DB - Стандартный PostgreSQL.
  • Приложение должно запускаться в docker-compose без дополнительных доработок.
  • Порт - 8000.
  • БД по умолчанию должна быть заполнена 20 машинами.
  • Груз обязательно должен содержать следующие характеристики:
    • локация pick-up;
    • локация delivery;
    • вес (1-1000);
    • описание.
  • Машина обязательно должна в себя включать следующие характеристики:
    • уникальный номер (цифра от 1000 до 9999 + случайная заглавная буква английского алфавита в конце, пример: " 1234A", "2534B", "9999Z")
    • текущая локация;
    • грузоподъемность (1-1000).
  • Локация должна содержать в себе следующие характеристики:
    • город;
    • штат;
    • почтовый индекс (zip);
    • широта;
    • долгота.

Список уникальных локаций представлен в прикрепленном csv файле "uszips.csv".

Необходимо осуществить выгрузку списка в базу данных Postgres при запуске приложения.

  • При создании машин по умолчанию локация каждой машины заполняется случайным образом;
  • Расчет и отображение расстояния осуществляется в милях;
  • Расчет расстояния должен осуществляться с помощью библиотеки geopy. help(geopy.distance). Маршруты не учитывать, использовать расстояние от точки до точки.
⭐ Задание разделено на 2 уровня сложности. Дедлайн по времени выполнения зависит от того, сколько уровней вы планируете выполнить.

Уровень 1

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

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

Уровень 2

Все что в уровне 1 + дополнительные функции:

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

Критерии оценки:

  • Адекватность архитектуры приложения;
  • Оптимизация работы приложения.

Как запустить проект

Создать .env в корне проекта

DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432

Выполнить команду

docker compose up --build 

Примеры запросов:

- Получить список грузов

GET - http://localhost/api/cargos/

Ответ

{
  "id": 1,
  "pick_up_location": {
    "city": "Coamo",
    "state": "Puerto Rico",
    "zip_code": "00769",
    "latitude": 18.09459,
    "longitude": -66.3607
  },
  "delivery_location": {
    "city": "Las Piedras",
    "state": "Puerto Rico",
    "zip_code": "00771",
    "latitude": 18.18797,
    "longitude": -65.86916
  },
  "weight": 124,
  "description": "Груз 1",
  "nearest_cars_count": 2
}

- Создание нового груза

POST - http://localhost/api/cargos/
{
    "pick_up_location": "99705",
    "delivery_location": "01079",
    "weight": 156,
    "description": "Описание"
}

Ответ

{
    "pick_up_location": "99705",
    "delivery_location": "01079",
    "weight": 156,
    "description": "Описание"
}

- Получить информацию о грузе по ID

GET - http://localhost/api/cargos/<id>/

Ответ

{
    "id": 1,
    "pick_up_location": {
        "city": "Coamo",
        "state": "Puerto Rico",
        "zip_code": "00769",
        "latitude": 18.09459,
        "longitude": -66.3607
    },
    "delivery_location": {
        "city": "Las Piedras",
        "state": "Puerto Rico",
        "zip_code": "00771",
        "latitude": 18.18797,
        "longitude": -65.86916
    },
    "weight": 124,
    "description": "Описание груза",
    "car_distances": [
        {
            "car_number": "2391N",
            "distance": 1741.7072000898597
        },
        {
            "car_number": "9021L",
            "distance": 3038.160193413027
        }
    ]
}

- Редактирование груза по id

PATCH - http://localhost/api/cargos/<id>/
{
    "weight": 500,
    "description": "Новое описание"
}

Ответ

{
    "weight": 500,
    "description": "Новое описание"
}

- Удаление груза по id

DELETE - http://localhost/api/cargos/<id>/

- Редактирование машины по id

PATCH - http://localhost/api/cars/<id>/
{
    "number": "7689N",
    "load_capacity": 124,
    "current_location": 11560
}

Ответ

{
    "id": 1,
    "number": "7689N",
    "load_capacity": 124,
    "current_location": 11560
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.