Микросервис route

В статье описываются функции, логика работы, конфигурация и методы микросервиса route.

Микросервис route предоставляет функциональность для управления маршрутами доставки заказов (просмотр, создание, редактирование и удаление).

Доступ к сервису предоставляется по запросу.

Логика работы

В работе микросервиса используются сущности:

  • Маршрут (Route) - содержит данные о маршруте доставки (id маршрута; информацию о точке отправления и точке прибытия; тип доставки; информацию о перевозчике; время, необходимое на доставку, а также доступность или недоступность доставки)
  • Референс (Reference) - содержит данные о типе запрашиваемого референса (id, ключ, название и содержимое референса (см. ReferenceItem ниже)
  • Содержимое референса (ReferenceItem) - содержит данные о содержимом референса (id, ключ, название объекта)

Аутентификация

При обращении к сервису аутентификация не нужна.

Service context path

/api/route/

Настройки и параметры конфигурации

Параметры конфигурации указываются в Vault.

Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",
    "LOGGING_LEVEL": "уровень_логирования",
    "POSTGRES_DATABASE": "route",
    "POSTGRES_MIGRATION_USER": "route_migration",
    "POSTGRES_PORT": "5432",
    "POSTGRES_USER": "route_user",
    "SERVER_PORT": "порт_сервера"
  }
}

Copy-icon
Указываемые на каждом отдельном стенде

// пример взят с тестового стенда


{
  "env": {
    "OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
    "OAUTH_ECOM_ISSUER_URI": "url_ECOM_OAuth",
    "OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
    "OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel",
    "POSTGRES_HOST": "хост_БД",
    "POSTGRES_MIGRATION_PASSWORD": "пароль",
    "POSTGRES_PASSWORD": "пароль_бд"
  }
}


Copy-icon

Методы микросервиса Copy-icon

Работа с маршрутами Copy-icon

  • Получение страницы со списком маршрутов - GET запрос, /v1/routes
Request parameters

{
  "sort": [
    {
      "sortBy": "name",
      "direction": "desc"
    }
  ],
  "page": 0,
  "size": 10
}


Copy-icon
Response sample

{
  "content": [
    {
      "id": "4e5d563b-ba98-4d73-a7f0-a3f70514da88",
      "name": "Китай",
      "description": "Китай",
      "assets": [
        {
          "id": "d8bebe28-5a6d-4f25-9c05-680a0bcf6080",
          "media": {
            "url": "master/catalog/images/1715076260063-1882559365.jpg",
            "absoluteUrl": "https://test-ecom-media.digitalchief.tech/master/catalog/images/1715076260063-1882559365.jpg",
            "name": "Китай (флаг).jpg",
            "type": "PHOTO",
            "size": 9712,
            "resolution": "612x407 px",
            "createdDate": "2024-05-07T13:04:38.167"
          },
          "title": "Китай (флаг)",
          "altAttr": "Китай (флаг)",
          "description": "",
          "sign": "",
          "tags": [
            ""
          ]
        }
      ]
    },
    {
      "id": "df7d8d66-39d5-466d-876b-f7e4f2bbecfc",
      "name": "Беларусь",
      "description": "Республика Беларусь, г. Минск, ул. Кальварийская, д.1",
      "assets": [
        {
          "id": "0e8ffc05-a085-4c5a-9679-de91d9b1367b",
          "media": {
            "url": "master/catalog/images/1715161957085-1882559365.png",
            "absoluteUrl": "https://test-ecom-media.digitalchief.tech/master/catalog/images/1715161957085-1882559365.png",
            "name": "Flag_of_Belarus.svg.png",
            "type": "PHOTO",
            "size": 5004,
            "resolution": "640x320 px",
            "createdDate": "2024-05-08T12:52:38.062"
          },
          "title": "Flag_of_Belarus",
          "altAttr": "Flag_of_Belarus",
          "description": "",
          "sign": "",
          "tags": [
            ""
          ]
        }
      ]
    }
  ],
  "number": 0,
  "size": 2,
  "totalElements": 2,
  "pageable": "INSTANCE",
  "last": true,
  "totalPages": 1,
  "sort": {
    "sorted": false,
    "unsorted": true,
    "empty": true
  },
  "first": true,
  "numberOfElements": 2,
  "empty": false
}

Copy-icon
Response codes

200 - операция выполнена успешно, страница со списком маршрутов получена

  • Создание маршрута - POST запрос, /v1/routes
Request body sample

{
  "departure": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departureName": "Main Store",
  "departureType": "point.type.location",
  "destination": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "destinationName": "Belarus",
  "destinationType": "point.type.region",
  "type": "delivery.courier",
  "typeTranslation": "Courier",
  "companyName": "delivery.company.dc",
  "companyNameTranslation": "DC",
  "deliveryHours": 12.5,
  "isAvailable": true
}

Copy-icon
Response sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departure": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departureName": "Main Store",
  "departureType": "point.type.location",
  "destination": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "destinationName": "Belarus",
  "destinationType": "point.type.region",
  "type": "delivery.courier",
  "typeTranslation": "Courier",
  "companyName": "delivery.company.dc",
  "companyNameTranslation": "DC",
  "deliveryHours": 12.5,
  "isAvailable": true
}

Copy-icon
Response codes
  • 200 - операция успешно выполнена, маршрут создан
  • 400 - ошибка, не удалось создать маршрут
  • Получение маршрута по его id - GET запрос, /v1/routes/{routeId}
Request parameters

routeId - path-параметр, обязательный: идентификационный номер маршрута
language - query-параметр, необязательный: язык страницы

Copy-icon
Response sample

{
  "id": "route022317DC",
  "departure": "a9efb6d6-4af5-4c2d-8af6-888777040e1d",
  "departureName": "Склад 11-1",
  "departureType": "point.type.location",
  "destination": "7e82a62d-12a2-4947-9cb8-29717eebcddd",
  "destinationName": "г. Валдай",
  "destinationType": "point.type.region",
  "type": "delivery.courier",
  "typeTranslation": "Курьерская доставка",
  "companyName": "delivery.company.dc",
  "companyNameTranslation": "DC",
  "deliveryHours": 8.5,
  "isAvailable": true
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, информация о маршруте получена
  • 404 - ошибка, не удалось найти маршрут с таким id
  • Удаление маршрута по его id - DELETE запрос, /v1/routes/{routeId}
Request parameters

routeId - path-параметр, обязательный: уникальный идентификатор маршрута

Copy-icon
Response sample

В ответе приходит только код операции, например, 204.

Response codes
  • 204 - операция прошла успешно, маршрут удален
  • 404 - ошибка, не удалось найти маршрут с таким id
  • Редактирование маршрута - PATCH запрос, /v1/routes/{routeId}
Request parameters

routeId - path-параметр: идентификатор маршрута

Copy-icon
Request body sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departure": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departureName": "Main Store",
  "departureType": "point.type.location",
  "destination": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "destinationName": "Belarus",
  "destinationType": "point.type.region",
  "type": "delivery.courier",
  "typeTranslation": "Courier",
  "companyName": "delivery.company.dc",
  "companyNameTranslation": "DC",
  "deliveryHours": 12.5,
  "isAvailable": true
}

Copy-icon
Response sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departure": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departureName": "Main Store",
  "departureType": "point.type.location",
  "destination": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "destinationName": "Belarus",
  "destinationType": "point.type.region",
  "type": "delivery.courier",
  "typeTranslation": "Courier",
  "companyName": "delivery.company.dc",
  "companyNameTranslation": "DC",
  "deliveryHours": 12.5,
  "isAvailable": true
}

Copy-icon
Response codes
  • 200 - операция прошла успешно, маршрут обновлен
  • 400 - ошибка, не удалось обновить маршрут
  • Получение отфильтрованного списка маршрутов - POST запрос, /v1/routes/list
Request parameters

language - query-параметр: язык отображения списка с маршрутами

Copy-icon
Request body sample

{
  "departure": "7e4993a1-7804-45fb-ba46-6d0b0634adfb",
  "destination": "01e50a75-202f-46bf-a8e3-9491ec0407f7"
}

Copy-icon
Response sample

[
  {
    "id": "route022313DC",
    "departure": "7e4993a1-7804-45fb-ba46-6d0b0634adfb",
    "departureName": "г. Калининград",
    "departureType": "point.type.region",
    "destination": "01e50a75-202f-46bf-a8e3-9491ec0407f7",
    "destinationName": "Главный склад",
    "destinationType": "point.type.location",
    "type": "delivery.courier",
    "typeTranslation": "Курьерская доставка",
    "companyName": "delivery.company.dc",
    "companyNameTranslation": "DC",
    "isAvailable": true
  }
]

Copy-icon
Response  codes

200 - операция выполнена успешно, список маршрутов получен

  • Загрузка списка маршрутов - PUT запрос, /v1/routes/list
Request body sample

[
   {
      "id":"route022315DC",
      "departure":"7e4993a1-7804-45fb-ba46-6d0b0634adfb",
      "departureName":"г. Калининград",
      "departureType":"point.type.region",
      "destination":"7e4993a1-7804-45fb-ba46-6d0b0634adfb",
      "destinationName":"г. Калининград",
      "destinationType":"point.type.region",
      "type":"delivery.courier",
      "typeTranslation":"Курьерская доставка",
      "companyName":"delivery.company.dc",
      "companyNameTranslation":"DC",
      "isAvailable":true
   },
   {
      "id":"route022314DC",
      "departure":"01e50a75-202f-46bf-a8e3-9491ec0407f7",
      "departureName":"Главный склад",
      "departureType":"point.type.location",
      "destination":"7e4993a1-7804-45fb-ba46-6d0b0634adfb",
      "destinationName":"г. Калининград",
      "destinationType":"point.type.region",
      "type":"delivery.courier",
      "typeTranslation":"Курьерская доставка",
      "companyName":"delivery.company.dc",
      "companyNameTranslation":"DC",
      "isAvailable":true
   },
   {
      "id":"route022312DC",
      "departure":"7e4993a1-7804-45fb-ba46-6d0b0634adfb",
      "departureName":"г. Калининград",
      "departureType":"point.type.region",
      "destination":"7e4993a1-7804-45fb-ba46-6d0b0634adfb",
      "destinationName":"г. Калининград",
      "destinationType":"point.type.region",
      "type":"delivery.courier",
      "typeTranslation":"Курьерская доставка",
      "companyName":"delivery.company.dc",
      "companyNameTranslation":"DC",
      "isAvailable":true
   }
]

Copy-icon
Response sample

{
  "created": 3,
  "updated": 0
}

Copy-icon
Response codes

200 - операция выполнена успешно, список маршрутов загружен

  • Получение страницы с маршрутами - POST запрос, /v1/routes/page
Request parameters

language - query-параметр: язык отображения страницы с маршрутами

Copy-icon
Request body sample

{
  "sort": [
    {
      "sortBy": "id",
      "direction": "ASC"
    }
  ],
  "page": 0,
  "size": 10,
  "filter": {
    "departure": "7e82a62d-12a2-4947-9cb8-29717eebcddd"
  }
}

Copy-icon
Response sample

{
  "content": [
    {
      "id": "route022318DC",
      "departure": "7e82a62d-12a2-4947-9cb8-29717eebcddd",
      "departureName": "г. Валдай",
      "departureType": "point.type.region",
      "destination": "a9efb6d6-4af5-4c2d-8af6-888777040e1d",
      "destinationName": "Склад 11-1",
      "destinationType": "point.type.location",
      "type": "delivery.courier",
      "typeTranslation": "Курьерская доставка",
      "companyName": "delivery.company.dc",
      "companyNameTranslation": "DC",
      "deliveryHours": 8.5,
      "isAvailable": true
    }
  ],
  "pageable": {
    "sort": {
      "sorted": true,
      "unsorted": false,
      "empty": false
    },
    "pageNumber": 0,
    "pageSize": 10,
    "offset": 0,
    "paged": true,
    "unpaged": false
  },
  "last": true,
  "totalPages": 1,
  "totalElements": 1,
  "first": true,
  "numberOfElements": 1,
  "sort": {
    "sorted": true,
    "unsorted": false,
    "empty": false
  },
  "size": 10,
  "number": 0,
  "empty": false
}

Copy-icon
Response codes

200 - операция выполнена успешно, получена страница с маршрутами

Работа с референсами Copy-icon

  • Получение списка возможных типов доставки или курьерских компаний - GET запрос, /v1/references/{key}
Request parameters

key - path-параметр, обязательный: ключ референса (для получения списка типов доставки используется ключ delivery.type; для списка курьерских команий - delivery.company)
language - query-параметр: язык отображения информации

Copy-icon
Response sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "key": "delivery.type",
  "name": "Тип доставки ",
  "items": [
    {
      "id": "5dc618af-af49-4adc-bccd-4d17aeff7611",
      "key": "delivery.courier",
      "name": "Курьерская доставка"
    }
  ]
}

Copy-icon
Response codes
  • 200 - операция успешно выполнена
  • 404 - ошибка, указанный ключ не найден