Skip to content

Instantly share code, notes, and snippets.

@adamw
Last active June 4, 2020 05:35
Show Gist options
  • Save adamw/15565ab02047c1a83efd9d9d55d0db24 to your computer and use it in GitHub Desktop.
Save adamw/15565ab02047c1a83efd9d9d55d0db24 to your computer and use it in GitHub Desktop.
import zio.Task
trait DB {
def execute(sql: String): Task[Unit]
}
class RelationalDB(cp: ConnectionPool) extends DB {
override def execute(sql: String): Task[Unit] =
Task {
println(s"Running: $sql, on: $cp")
}
}
// ---
trait UserModel {
def insert(u: User): Task[Unit]
}
// service implementation
class DefaultUserModel(db: DB) extends UserModel {
override def insert(u: User): Task[Unit] =
db.execute(s"INSERT INTO user VALUES ('${u.name}')")
}
// ---
// service (interface w/ implementation)
class UserRegistration(notifier: UserNotifier, userModel: UserModel) {
def register(u: User): Task[User] = {
for {
_ <- userModel.insert(u)
_ <- notifier.notify(u, "Welcome!")
} yield u
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment