Микросервис push-notification-orchestration

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

Микросервис предназначен для взаимодействия сервиса push-уведомлений с другими микросервисами платформы.

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

Логика работы Copy-icon

В работе микросервиса участвуют следующие сущности:

  • Токен Firebase (FirebaseToken) - содержит токен Firebase и срок его действия
  • Push-уведомление (PushUserNotification) - содержит информацию о конкретном push-уведомлении (заголовок, тело уведомления, изображение и др.)
  • Сводка о наличии непрочитанных уведомлений (NotificationsSummary) - содержит информацию о наличии одного или нескольких непрочитанных уведомлений у конкретного пользователя
  • История push-уведомлений (NotificationHistory) - содержит данные обо всех push-уведомлениях пользователя (ID уведомления, ID пользователя, данные о прочтении/непрочтении уведомления, дата отправки и др.)

Аутентификация Copy-icon

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

  • POST /v1/firebase/token
  • DELETE /v1/firebase/token
  • POST /v1/firebase/push
  • GET /v1/firebase/notifications-history
  • GET /v1/firebase/notifications-summary

Для остальных запросов аутентификация не требуется.

Service context path Copy-icon

/api/push-orchestration/

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

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

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

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",
    "LOGGING_FORAMT": "формат_логирования",
    "LOGGING_LEVEL": "уровень_логирования",
    "POSTGRES_DATABASE": "push_orchestration",
    "POSTGRES_MIGRATION_USER": "push_orchestration_migration",
    "POSTGRES_PORT": "5432",
    "POSTGRES_USER": "push_orchestration_user",
    "SERVER_PORT": "порт_сервера"
  }
}

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

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

 

{
  "env": {
    "ECOM_SECURITY_API_KEY": "секретный_ключ",
    "KAFKA_BROKER_ADDRESS": "сокет_для_брокера_kafka",
    "POSTGRES_HOST": "хост_бд",
    "POSTGRES_MIGRATION_PASSWORD": "пароль",
    "POSTGRES_PASSWORD": "пароль",
    "PUSH_NOTIFICATION_URL": "url_доступа_к_сервису_push-notification",
    "SPRING_OAUTH_CLIENT_ID": "client_id",
    "SPRING_OAUTH_INTROSPECT_URI": "параметр_URI_проверки_токена_OAuth2",
    "SPRING_OAUTH_ISSUER_URI": "идентификатор_сервера_который_выдает_токены",
    "SPRING_PROFILES_ACTIVE": "предустановленная_конфигурация_для_сервиса"
  }
}

Copy-icon

Сохранение нового токена - POST запрос, /v1/firebase/token

Request parameters

barrier-user-utc-offset - header: тайм-зона пользователя относительно UTC

Copy-icon
Request body sample

{
  "token": //токен,
  "expiration": "2024-05-27T13:52:46.761Z"
}


Copy-icon
Response sample

Отсутствует.

Response codes
  • 204 - операция выполнена успешно
  • 401 - ошибка, Unauthorized
  • 403 - ошибка, Forbidden
  • 500 - ошибка, Internal Server Error

Удаление токена - DELETE запрос, /v1/firebase/token

Request parameters

Отсутствуют.

Request body sample

{
  "token": //токен,
  "expiration": "2024-05-27T13:52:46.761Z"
}


Copy-icon
Response sample

Отсутствует.

Response codes
  • 204 - операция выполнена успешно
  • 401 - ошибка, Unauthorized
  • 403 - ошибка, Forbidden
  • 500 - ошибка, Internal Server Error

Запуск тестового триггера отправки push-уведомлений - POST запрос, /v1/firebase/test-job-notifications

Request parameters

Отсутствуют.

Request body sample

Отсутствует.

Response sample

Отсутствует.

Response codes
  • 202 - операция выполнена успешно
  • 500 - ошибка, Internal Server Error

Отправка push-уведомлений - POST запрос, /v1/firebase/push

Request parameters

Отсутствуют.

Request body sample

{
  "title": "Благодарим за заказ",
  "message": "Ваш заказ №123 оформлен. Спасибо за покупку!",
  "image": "order_push.jpg",
  "utcOffsets": [
    0
  ]
}

Copy-icon
Response sample

Отсутствует.

Response codes
  • 204 - операция выполнена успешно
  • 401 - ошибка, Unauthorized
  • 403 - ошибка, Forbidden
  • 500 - ошибка, Internal Server Error

Получение истории firebase push-уведомлений - GET запрос, /v1/firebase/notifications-history

Request parameters

markViewed - query-параметр: флаг, указывающий нужно ли пометить уведомления как прочитанные или нет
page - query-параметр: номер страницы
size - query-параметр: количество элементов на странице
sort - query-параметр: сортировка элементов на странице

Copy-icon
Response sample

{
  "content": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "userId": "143948",
      "viewed": true,
      "notification": {
        "title": "Благодарим за заказ",
        "message": "Ваш заказ №123 оформлен. Спасибо за покупку!",
        "image": null
      },
      "sendAt": "2024-05-28T10:09:21.984Z"
    }
  ],
  "number": 0,
  "size": 10,
  "totalElements": 1
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получен список push-уведомлений
  • 401 - ошибка, Unauthorized
  • 403 - ошибка, Forbidden
  • 500 - ошибка, Internal Server Error

Получение информации о наличии непрочитанных push-уведомлений - GET запрос, /v1/firebase/notifications-summary

Request parameters

page - query-параметр: номер страницы
size - query-параметр: количество элементов на странице
sort - query-параметр: сортировка элементов на странице

Copy-icon
Response sample

//в ответе приходит информация о наличии одного или нескольких непрочитанных уведомлений; возвращает значение true, если просмотрены все уведомления, в противном случае приходит значение false

{
  "viewed": true
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получены данные о наличии/отсутствии непрочитанных уведомлений
  • 401 - ошибка, Unauthorized
  • 403 - ошибка, Forbidden
  • 500 - ошибка, Internal Server Error