Skip to content

Instantly share code, notes, and snippets.

View jczuchnowski's full-sized avatar
🎈

Jakub Czuchnowski jczuchnowski

🎈
View GitHub Profile
val zioResult: ZIO[Any, Exception, PortfolioStatus] =
ApplicationService.getPortfolio(portfolioId).provide(env)
val runtime = new DefaultRuntime() {}
runtime.unsafeRun(zioResult)
class LiveEnv
extends SlickAssetRepository
with SlickPortfolioAssetRepository
with LiveDatabaseProvider
val env = new LiveEnv()
object ApplicationService {
def getPortfolio(portfolioId: PortfolioId): ZIO[AssetRepository with PortfolioAssetRepository, Exception, PortfolioStatus] = ...
}
def fromStreamingDBIO[T](dbio: StreamingDBIO[_, T]): ZIO[DatabaseProvider, Throwable, ZStream[Any, Throwable, T]] =
for {
db <- ZIO.accessM[DatabaseProvider](_.databaseProvider.db)
r <- ZIO.effect(db.stream(dbio).toStream())
} yield r
def fromDBIO[R](dbio: DBIO[R]): ZIO[DatabaseProvider, Throwable, R] =
for {
db <- ZIO.accessM[DatabaseProvider](_.databaseProvider.db)
r <- ZIO.fromFuture(ec => db.run(dbio))
} yield r
result <- ZIO.fromFuture(ec => db.run(dbio))
db <- ZIO.accessM[DatabaseProvider](_.databaseProvider.db)
trait PortfolioAssetRepository {
def portfolioAssetRepository: PortfolioAssetRepository.Service
}
object PortfolioAssetRepository {
trait Service {
def add(name: String, price: BigDecimal): IO[RepositoryException, AssetId]
def getById(id: AssetId): IO[RepositoryException, Option[Asset]]
trait LiveDatabaseProvider extends DatabaseProvider {
override val databaseProvider = new DatabaseProvider.Service {
override val db = ZIO.effectTotal(Database.forURL(url = "jdbc:h2:prod"))
}
}