in app/com/gu/memsub/services/JsonDynamoService.scala [35:47]
def find[B](b: B)(implicit of: OWrites[B], r: Reads[A]): M[List[A]] = Monad[M].point {
val primaryKey = table.describe().getKeySchema.get(0).getAttributeName
val jsonItem = Json.toJson(b)
val dynamoResult = (jsonItem \ primaryKey).validate[String].asOpt.fold {
itemFormat.reads(jsonItem).fold(err => Seq.empty, { itemFromJson =>
val filters = itemFromJson.asMap().asScala.map { case (k, v) => new ScanFilter(k).eq(v): ScanFilter }.toSeq
table.scan(new ScanSpec().withScanFilters(filters:_*)).iterator().asScala.toSeq
})
} { keyValue =>
Option(table.getItem(new GetItemSpec().withPrimaryKey(primaryKey, keyValue))).toSeq
}
dynamoResult.flatMap(i => Json.fromJson[A](Json.toJson[Item](i)).asOpt).toList
}