Skip to content

Commit

Permalink
Add lambda handler
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathonherbert committed May 10, 2024
1 parent 5031090 commit 206f47a
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 4 deletions.
4 changes: 3 additions & 1 deletion build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ lazy val cql = project.in(file("."))
"org.scalatest" %% "scalatest" % "3.2.9" % "test",
"com.gu" % "content-api-client-default_2.13" % "20.0.2",
"com.amazonaws" % "aws-lambda-java-core" % "1.2.3",
"com.amazonaws" % "aws-lambda-java-events" % "3.11.4"
"com.amazonaws" % "aws-lambda-java-events" % "3.11.4",
"ch.qos.logback" % "logback-classic" % "1.4.7",
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.5",
)
)

Expand Down
2 changes: 1 addition & 1 deletion cdk/lib/__snapshots__/cql-lambda.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ exports[`The CqlLambda stack matches the snapshot 1`] = `
},
},
"FunctionName": "cql-lambda-TEST",
"Handler": "cql.Handler::apply",
"Handler": "cql.Handler::handleRequest",
"MemorySize": 1024,
"Role": {
"Fn::GetAtt": [
Expand Down
2 changes: 1 addition & 1 deletion cdk/lib/cql-lambda.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export class CqlLambda extends GuStack {

new GuLambdaFunction(this, 'cql-lambda', {
app: 'cql-lambda',
handler: 'cql.Handler::apply',
handler: 'cql.Handler::handleRequest',
functionName: `cql-lambda-${this.stage}`,
runtime: Runtime.JAVA_11,
fileName: "cql-lambda.jar"
Expand Down
57 changes: 57 additions & 0 deletions src/main/scala/Handler.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package cql

import com.amazonaws.services.lambda.runtime.{Context, RequestHandler}
import com.amazonaws.services.lambda.runtime.events.{
APIGatewayProxyRequestEvent,
APIGatewayProxyResponseEvent
}
import io.circe.generic.auto._
import io.circe.syntax._
import util.Logging
import cql.lang.Cql
import scala.util.Try
import scala.concurrent.Await
import scala.concurrent.duration.DurationInt

class Handler
extends RequestHandler[
APIGatewayProxyRequestEvent,
APIGatewayProxyResponseEvent
]
with Logging with QueryJson {
implicit val ec: scala.concurrent.ExecutionContext =
scala.concurrent.ExecutionContext.global
val cql = new Cql()

def handleRequest(
event: APIGatewayProxyRequestEvent,
context: Context
): APIGatewayProxyResponseEvent = {
logger.info("Received request with body: " + event.getBody)

val eventualResult = cql
.run(event.getBody)
.map(r =>
Try {
(200, r.asJson.spaces2)
}.recover { e =>
logger.error("Server error", e)
(500, e.getMessage())
}.get
)
.recover { e =>
logger.error("Bad request", e)
(400, e.getMessage())
}

val (statusCode, responseBody) = Await.result(eventualResult, 5.seconds)

logger.info(s"Responding with status ${statusCode}: ${responseBody}")

new APIGatewayProxyResponseEvent()
.withStatusCode(statusCode)
.withBody(
responseBody
)
}
}
2 changes: 1 addition & 1 deletion src/main/scala/HttpServer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import io.circe.syntax.*
import com.github.pjfanning.pekkohttpcirce.*
import scala.io.StdIn
import scala.util.{Failure, Success, Try}
import cql.lang.{Cql}
import cql.lang.Cql

object HttpServer extends QueryJson {
val cql = new Cql()
Expand Down
5 changes: 5 additions & 0 deletions src/main/scala/util/Logging.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package cql.util

import com.typesafe.scalalogging.LazyLogging

trait Logging extends LazyLogging

0 comments on commit 206f47a

Please sign in to comment.