def reindex()

in app/com/gu/floodgate/contentsource/ContentSourceApi.scala [87:133]


  def reindex(id: String, environment: String, from: Option[String], to: Option[String]) = Action.async {
    implicit request =>
      def triggerReindex: Future[Result] = {
        DateParameters(from, to) match {
          case Right(dp: DateParameters) =>
            reindexService.reindex(id, environment, dp) map {
              case Right(runningJob) =>
                logger.info(s"Returning running job for: ${runningJob.contentSourceId}")
                Ok(Json.toJson(runningJob))
              case Left(customError) => {
                logger.warn(
                  s"Content source with id: $id returned custom error in response to a reindex request: ${customError.message}"
                )
                BadRequest(Json.toJson(ErrorResponse(customError.message)))
              }
            }
          case Left(error) => {
            logger.error(
              s"Content source with id: $id returned error in response to a reindex request: ${error.message}"
            )
            Future.successful(BadRequest(Json.toJson(ErrorResponse(error.message))))
          }
        }
      }

      val maybeActor = bulkJobActorsMap.get(environment)

      maybeActor match {
        case Some(actor) => {
          val futureActorStatus = (actor ? IsActorReindexing).mapTo[BulkReindexRequestResult]
          futureActorStatus.flatMap {
            case _: IsReindexing => {
              BulkReindexInProcess(
                s"Bulk reindex is in process for content source with id: $id and environment: $environment."
              )
              Future.successful(Ok(s"""{ "IsBulkReindexing": true}"""))
            }
            case NotReindexing => triggerReindex
            case _ => Future.successful(Ok(s"""{ "IsBulkReindexing": false}"""))
          }
        }
        case None => {
          ErrorResponse(s"No actor found for $environment. Running reindex for $id.")
          triggerReindex
        }
      }
  }