def run()

in src/main/scala/HttpServer.scala [25:81]


  def run(): Unit = {

    implicit val system = ActorSystem(Behaviors.empty, "my-system")
    // needed for the future flatMap/onComplete in the end
    implicit val executionContext = system.executionContext

    val responseHeaders: List[HttpHeader] = List(
      headers.`Access-Control-Allow-Origin`.`*`
    )

    val route =
      path("cql") {
        get {
          parameters("query") { query =>
            println(s"Parsing query ${query}");

            complete {
              val result = cql.run(query)
              result
                .map { r =>
                  Try {
                    HttpResponse(
                      status = 200,
                      entity = r.asJson.spaces2,
                      headers = responseHeaders
                    )
                  }.recover { e =>
                    e.printStackTrace()
                    HttpResponse(
                      status = 500,
                      entity = e.getMessage(),
                      headers = responseHeaders
                    )
                  }.get
                }
                .recover { e =>
                  HttpResponse(
                    status = 400,
                    entity = e.getMessage(),
                    headers = responseHeaders
                  )
                }
            }
          }
        }
      }

    val bindingFuture = Http().newServerAt("localhost", 5050).bind(route)

    println(
      s"Server now online. Please navigate to http://localhost:5050/query\nPress RETURN to stop..."
    )
    StdIn.readLine() // let it run until user presses return
    bindingFuture
      .flatMap(_.unbind()) // trigger unbinding from the port
      .onComplete(_ => system.terminate()) // and shutdown when done
  }