Ucaller
Описание#
Является сервисом-пройслойкой, который отвечает только за один тип уведомлений - подтверждение номера телефона, через входящий звонок. Кодом подтверждения будут являться 4 последние цифры номера.
Принцип работы#
Сервис принимает gRPC-запрос SendNotification с номером телефона и секретным кодом от NotificationService.
Модель входящих данных#
type NotificationRequest struct {
ContactType int32 // тип контакта
User_UUID *string // уникальный идентификатор пользователя
Contacts []string // контакты - номера телефонов
SecretCode int32 // секретный код подтверждения
}
Обработчик вызывает метод SendNotification из usecase слоя.
Этот метод кладёт данные в буферизированный канал.
На один инстанс сервиса запущен один worker().
Что он делает:
- Каждые 250мс проверяет очередь.
- Берёт запрос из канала и вызывает для него
sendNotification(). В случае ошибки создаёт новый Span и в отложенном вызове завершает его.
Что делает sendNotification():
- Проверяет, не пуст ли массив с номерами телефонов, в противном лучае устанавливает статус в Span - код и текст ошибки, а также возвращает её.
- Формирует GET-запрос и отправляет его по URL из конфига.
- В отложенном вызове функции-замыкании читает тело ответа и закрывает соединение. В случае ошибки: В Span устанавливается статус - код и текст ошибки; В Sentry - ошибка логгируется.
- Независимо от результата сохранет данные запроса в БД.
- В случае успеха возвращает
nil.