in app/data/Recipes.scala [131:158]
def findByBaseImage(imageId: BaseImageId)(implicit
dynamo: Dynamo
): Iterable[Recipe] = filteredList(_.baseImageId == imageId)
def incrementAndGetBuildNumber(
id: RecipeId
)(implicit dynamo: Dynamo): Option[Int] = {
val updateRequest = UpdateItemRequest
.builder()
.tableName(table.name)
.key(Map("id" -> AttributeValue.builder.s(id.value).build()).asJava)
.updateExpression("ADD nextBuildNumber :val1")
.conditionExpression(
"attribute_exists(id)"
) // to ensure the recipe exists in Dynamo
.expressionAttributeValues(
Map(":val1" -> AttributeValue.builder().n("1").build()).asJava
)
.returnValues(
ReturnValue.UPDATED_NEW
) // TODO Scanamo doesn't support this
.build
val updateResult = dynamo.client.updateItem(updateRequest)
if (updateResult.attributes.containsKey("nextBuildNumber"))
Some(updateResult.attributes.get("nextBuildNumber").n.toInt)
else
None
}