Микросервис 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"
}
}
// пример взят с тестового стенда
{
"env": {
"FIREBASE_INTEGRATION_GOOGLE_CREDENTIALS": "конфигурация_JSON_для_учетной_записи_администратора_Google",
"POSTGRES_HOST": "хост_бд",
"POSTGRES_MIGRATION_PASSWORD": "пароль",
"POSTGRES_PASSWORD": "пароль"
}
}
Методы микросервиса
- Сохранение нового токена для пользователя - POST запрос, /v1/firebase/users/{userId}/token
userId - path-параметр, обязательный: уникальный идентификатор
пользователя
barrier-user-utc-offset - header: тайм-зона
пользователя относительно UTC
{
"token": //токен,
"expiration": "2024-05-27T13:52:46.761Z"
}
Отсутствует.
- 204 - операция выполнена успешно
- 500 - ошибка, Internal Server Error
- Удаление токена пользователя - DELETE запрос, /v1/firebase/users/{userId}/token
userId - path-параметр, обязательный: уникальный идентификатор
пользователя
{
"token": //токен,
"expiration": "2024-05-27T13:52:46.761Z"
}
Отсутствует.
- 204 - операция выполнена успешно
- 500 - ошибка, Internal Server Error
- Отправка push-уведомления в firebase для конкретного пользователя - POST запрос, /v1/firebase/users/{userId}/push
userId - path-параметр, обязательный: уникальный идентификатор
пользователя
{
"title": "Благодарим за
заказ",
"message": "Ваш заказ №123 оформлен. Спасибо за
покупку!",
"image": "order_push.jpg",
"utcOffsets": [
0
]
}
Отсутствует.
- 204 - операция выполнена успешно, уведомление отправлено
- 500 - ошибка, Internal Server Error
- Получение данных о прочтении/непрочтении push-уведомлений пользователем - GET запрос, /v1/firebase/users/{userId}/notifications-summary
userId - path-параметр, обязательный: уникальный идентификатор пользователя
page - query-параметр: номер страницы
size - query-параметр: количество элементов на странице
sort - query-параметр: сортировка элементов на странице
//в ответе приходит информация о наличии одного или нескольких непрочитанных уведомлений; возвращает значение true
, если просмотрены все уведомления, в противном случае приходит значение false
{
"viewed": true
}
- 200 - операция выполнена успешно, получены данные о наличии/отсутствии непрочитанных уведомлений
- 500 - ошибка, Internal Server Error
- Получение истории firebase push-уведомлений пользователя - GET запрос, /v1/firebase/users/{userId}/notifications-history
userId - path-параметр, обязательный: уникальный идентификатор пользователя
markViewed - query-параметр: флаг, указывающий нужно ли пометить уведомления как прочитанные или нет
page - query-параметр: номер страницы
size - query-параметр: количество элементов на странице
sort - query-параметр: сортировка элементов на странице
{
"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
}
- 200 - операция выполнена успешно, получена история push-уведомлений пользователя
- 500 - ошибка, Internal Server Error
- Поиск пользователей по часовому поясу - GET запрос, /v1/firebase/users/by-local-utc-offset
utcOffset - query-параметр: часовой пояс
{
"users": [
"143948",
"143948",
"145653",
"143948",
"143948",
"146461",
"143070",
"145971",
"145981",
"145673",
"143948",
"146497",
"144977"
]
}
- 200 - операция выполнена успешно, получен список пользователей
- 400 - ошибка, Bad Request
- 500 - ошибка, Internal Server Error