Задача [0506]: API для отправки произвольного уведомления пользователю

Формулировка проблемы: необходимо реализовать метод API, который будет отправлять произвольное уведомление пользователю, группе либо на указанные e-mail'ы.

Решение.

Необходимо реализовать следующий метод:

URL метода: rest/api/notifications/send.

Тип запроса: POST.

Метод принимает следующие параметры (json):

Один из параметров users / groups / logins / emails должен быть передан обязательно.

Пользователь, от имени которого производится действие, должен быть суперадминистратором (не локальным) системы.

Метод возвращает json-объект с полями:

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

{
  "header": "Срочное собрание!",
  "message": "Прошу Вас собраться в 10:00 в актовом зале.",
  "users": ["7b953be8-bddb-4ce4-bbfd-ae9548f69c7f", "e65f62fa-7045-4b5b-b61d-46ca00ea7af1"],
  "groups": [1, 5, 7],
  "logins": ["Абдрешен", "Слепаков", "user_100500", "1"],
  "emails": ["bobrov@arta.kz"]
}

Пример возвращаемого json-объекта при успешном выполнении метода:


{
    "errorCode": 0,
    "errorMessage": "Уведомление отправлено"
}

Альтернативные потоки событий

Альтернативный поток №1. Не передан обязательный параметр message. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 3,
  "errorMessage": "Не передан параметр message"
}

действие не выполняется.

Альтернативный поток №2. Не передан хотя бы один из параметров users / groups / logins / emails. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 3,
  "errorMessage": "Не передан параметр 'users', 'groups', 'logins' либо 'emails'"
}

действие не выполняется.

Альтернативный поток №3. Переданы некорректные параметры users / groups / emails (не по формату). Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 3,
  "errorMessage": "Переданы некорректные параметры"
}

действие не выполняется.

Альтернативный поток №4. Переданы некорректные (несуществующие) идентификаторы пользователей в параметре users. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 3,
  "errorMessage": "Пользователи с uuid %uuid1%, %uuid2%, ... не найдены"
}

действие не выполняется.

Альтернативный поток №5. Переданы некорректные (несуществующие) идентификаторы групп в параметре groups. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 3,
  "errorMessage": "Группы с uuid %uuid1%, %uuid2%, ... не найдены"
}

действие не выполняется.

Альтернативный поток №6. Переданы некорректные (несуществующие) логины пользователей в параметре logins. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 3,
  "errorMessage": "Пользователи с логинами %логин1%, %логин2%, ... не найдены"
}

действие не выполняется.

Альтернативный поток №7. Метод выполняется не от имени суперадминистратора системы. Сервер возвращает ошибку HTTP 403 с сообщением:

{
  "errorCode": 2,
  "errorMessage": "Действие необходимо выполнять от имени администратора системы"
}

действие не выполняется.

Во всех остальных случаях метод выполняется успешно, сервер добавляет уведомления в очередь и отправляет их асинхронно:

Для отправки уведомлений на e-mail и в jabber должны быть настроены параметры рассылки в Подсистеме администрирования -> Настройки системы -> Настройки уведомлений.

Если передан некорректный (несуществующий) e-mail получателя, то уведомление для них не отправится (метод при этом также выполнится успешно).

Примечание.

Если один и тот же пользователь выбран несколько раз (один раз - как пользователь, еще один либо несколько раз - выбрав группы, куда он входит, в третий раз - по логину), то действие для него должно выполниться единожды.