def updateLogins = Action.async()

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)
        }
      })
    }
  }