private def registerCommon()

in registration/app/registration/controllers/Main.scala [70:93]


  private def registerCommon(registration: Registration): Future[Either[NotificationsError, RegistrationResponse]] = {

    def validate(topics: Set[Topic]): Future[Set[Topic]] =
      topicValidator
        .removeInvalid(topics)
        .map {
          case Right(filteredTopics) =>
            logger.debug(s"Successfully validated topics in registration (${registration.deviceToken}), topics valid: [$filteredTopics]")
            filteredTopics
          case Left(e) =>
            logger.error(s"Could not validate topics ${e.topicsQueried} for registration (${registration.deviceToken}), reason: ${e.reason}")
            topics
        }

    def registerWith(registrar: NotificationRegistrar, topics: Set[Topic]) =
      registrar
        .register(registration.deviceToken, registration.copy(topics = topics))

    def logErrors: PartialFunction[Try[Either[ProviderError, RegistrationResponse]], Unit] = {
      case Success(Left(v)) => logger.error(s"Failed to register $registration with ${v.providerName}: ${v.reason}")
    }

    validate(registration.topics).flatMap(registerWith(registrar, _).andThen(logErrors))
  }