У меня есть метод, который я написал для обогащения персональных данных, выполнив вызов API и добавив обогащенные данные.
поэтому у меня есть этот класс дел:
case class Person(personData: PersonData, dataEnrichment: Option[DataEnrichment])
мой метод предполагает возвращение этого класса дел.
, но у меня есть несколько фильтров раньше,
в случае, если рост лица не равен "1.8 m"
ИЛИ, если personId не был найден в био с использованием регулярного выражения, я хочу вернуть Person
с dataEnrichment = None
моя проблема в том, что рост лица и personId являются самими параметрами.
так это выглядит так:
def enrichPersonObjWithApiCall(person: Person) = {
person.personData.height.map(_.equals("1.8 m")) match {
case Some(true) =>
val personId = person.personData.bio flatMap { comment =>
extractPersonIdIfExists(comment)
}
personId match {
case Some(perId) =>
apiCall(perId) map { apiRes =>
Person(
person.personData,
dataEnrichment = apiRes)
}
case _ =>
Future successful Person(
person.personData,
dataEnrichment = None)
}
case _ =>
Future successful Person(
person.personData,
dataEnrichment = None)
}
}
def extractPersonIdIfExists(personBio: String): Option[String] = {
val personIdRegex: Regex = """(?<=PersonId:)[^;]+""".r
personIdRegex.findFirstIn(personBio)
}
def apiCall(personId: String): Future[Option[DataEnrichment]] = {
???
}
case class DataEnrichment(res: Option[String])
case class PersonData(name: String, height: Option[String], bio: Option[String])
dosent, похоже, лучшая практика для такого выполнения.У вас есть более элегантный способ получить тот же результат?