in app/controllers/LoginHistoryController.scala [41:69]
def updateLogins = Action.async(parse.xml) { request=>
val client = esClientMgr.getClient()
val maybeLoginsList = (request.body \ "recentLogins").map(RecentLogin.fromXml(_))
val errors = maybeLoginsList.collect({
case Left(err)=>err
})
if(errors.nonEmpty){
Future(BadRequest(GenericErrorResponse("bad_data", errors.mkString(";")).asJson))
} else {
val loginsList = maybeLoginsList.collect({
case Right(log)=>log
})
val resulFutures = Future.traverse(loginsList) { loginEntry=>
client.execute {
update(loginEntry.idForElastic).in(s"$loginsIndex/login").docAsUpsert(loginEntry)
}
}
resulFutures.map(results=>{
val outErrors = results.collect({case Left(err)=>err})
if(outErrors.nonEmpty){
InternalServerError(GenericErrorResponse("index_error", outErrors.mkString(";")).asJson)
} else {
Ok(GenericErrorResponse("ok", s"${results.length} records stored").asJson)
}
})
}
}