🥰
Scala で DynamoDB の読み書き
scanamo を使って Scala で DynamoDB を読み書きするサンプル.
//> using scala "3.3.1"
//> using dep "org.scanamo::scanamo:1.0.0-M25"
import org.scanamo.Scanamo
import org.scanamo.Table
// serial_id === "..." のように文字列で predicate を書くためのおまじない
import org.scanamo.syntax.*
import org.scanamo.generic.auto.*
case class Record(name: String, id: Long, memo: String)
@main
def run =
// Table[T](name: String) は org.scanamo.DynamoFormat 型のインスタンスを受け取る.
// このインスタンスの実装に応じて DynamoDB と JVM の型のシリアライズ・デシリアライズが決まる.
// org.scanamo.generic.auto.* をインポートすることで自動で DynamoFormat インスタンスが導出される.
val table = Table[Record]("dynamodbのtable名")
val record = Record("example", 0L, "nope")
// 同期的にリクエストを送るクライアントと
// ScanamoCats など非同期にリクエストを送るクライアントが存在する.
// 利用時は aws の dynamodb クライアントのインスタンスを渡して初期化する.
val client = Scanamo(???)
// 変更やクエリのアクションを定義して、それを client に実行させるメンタルモデル
val writeAction = table.putAll(Set(record))
client.exec(writeAction)
// 読み込み側
val readAction = table.get("name" === "example")
val result = client.exec(readAction)
val Some(Right(data)) = result: @unchecked
Discussion