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

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

Микросервис позволяет управлять push-уведомлениями.

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

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

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

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

Аутентификация и авторизация

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

Service context path

/api/push-notification/

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

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

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

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",
    "POSTGRES_DATABASE": "push_notification",
    "POSTGRES_MIGRATION_USER": "push_notification_migration",
    "POSTGRES_PORT": "5432",
    "POSTGRES_USER": "push_notification_user"

  }
}


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

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


{
  "env": {
    "FIREBASE_INTEGRATION_GOOGLE_CREDENTIALS": "конфигурация_JSON_для_учетной_записи_администратора_Google",
    "POSTGRES_HOST": "хост_бд",
    "POSTGRES_MIGRATION_PASSWORD": "пароль",
    "POSTGRES_PASSWORD": "пароль"
  }
}


Copy-icon

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

  • Сохранение нового токена для пользователя - POST запрос, /v1/firebase/users/{userId}/token
Request parameters

userId - path-параметр, обязательный: уникальный идентификатор пользователя
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 - операция выполнена успешно
  • 500 - ошибка, Internal Server Error
  • Удаление токена пользователя - DELETE запрос, /v1/firebase/users/{userId}/token
Request parameters

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

Copy-icon
Request body sample

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


Copy-icon
Response sample

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

Response codes
  • 204 - операция выполнена успешно
  • 500 - ошибка, Internal Server Error
  • Отправка push-уведомления в firebase для конкретного пользователя - POST запрос, /v1/firebase/users/{userId}/push
Request parameters

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

Copy-icon
Request body sample

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

Copy-icon
Response sample

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

Response codes
  • 204 - операция выполнена успешно, уведомление отправлено
  • 500 - ошибка, Internal Server Error
  • Получение данных о прочтении/непрочтении push-уведомлений пользователем - GET запрос, /v1/firebase/users/{userId}/notifications-summary
Request parameters

userId - path-параметр, обязательный: уникальный идентификатор пользователя
page - query-параметр: номер страницы
size - query-параметр: количество элементов на странице
sort - query-параметр: сортировка элементов на странице

Copy-icon
Request body sample

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

{
  "viewed": true
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получены данные о наличии/отсутствии непрочитанных уведомлений
  • 500 - ошибка, Internal Server Error
  • Получение истории firebase push-уведомлений пользователя - GET запрос, /v1/firebase/users/{userId}/notifications-history
Request parameters

userId - path-параметр, обязательный: уникальный идентификатор пользователя
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-уведомлений пользователя
  • 500 - ошибка, Internal Server Error
  • Поиск пользователей по часовому поясу - GET запрос, /v1/firebase/users/by-local-utc-offset
Request parameters

utcOffset - query-параметр: часовой пояс

Copy-icon
Response sample

{
  "users": [
    "143948",
    "143948",
    "145653",
    "143948",
    "143948",
    "146461",
    "143070",
    "145971",
    "145981",
    "145673",
    "143948",
    "146497",
    "144977"
  ]
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, получен список пользователей
  • 400 - ошибка, Bad Request
  • 500 - ошибка, Internal Server Error