app/controllers/PressController.scala (43 lines of code) (raw):
package controllers
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB
import org.scanamo.generic.auto.genericDerivedFormat
import org.scanamo.{Scanamo, Table}
import play.api.libs.json.{Json, OFormat}
import software.amazon.awssdk.services.dynamodb.DynamoDbClient
object FrontPressRecord {
implicit val jsonFormat: OFormat[FrontPressRecord] =
Json.format[FrontPressRecord]
}
case class FrontPressRecord(
stageName: String,
frontId: String,
pressedTime: String,
errorCount: Int,
messageText: String,
statusCode: String,
actionTime: String
)
class PressController(
client: DynamoDbClient,
val deps: BaseFaciaControllerComponents
) extends BaseFaciaController(deps) {
private lazy val pressedTable =
Table[FrontPressRecord](config.faciatool.frontPressUpdateTable)
def getLastModified(path: String) = AccessAPIAuthAction { request =>
import org.scanamo.syntax._
val record: Option[FrontPressRecord] = Scanamo(client)
.exec(pressedTable.query("stageName" === "live" and "frontId" === path))
.flatMap(_.toOption)
.headOption
record.map(r => Ok(r.pressedTime)).getOrElse(NotFound)
}
def getLastModifiedStatus(stage: String, path: String) = AccessAPIAuthAction {
request =>
import org.scanamo.syntax._
val record: Option[FrontPressRecord] = Scanamo(client)
.exec(pressedTable.query("stageName" === stage and "frontId" === path))
.flatMap(_.toOption)
.headOption
record.map(r => Ok(Json.toJson(r))).getOrElse(NotFound)
}
}