Skip to content

Commit b5ae662

Browse files
committed
Seperate flyway from sqlDatabases
1 parent c49b368 commit b5ae662

File tree

7 files changed

+37
-29
lines changed

7 files changed

+37
-29
lines changed

modules/data/src/main/scala/scaladex/data/Main.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,15 @@ object Main extends LazyLogging {
5454

5555
val dataPaths = DataPaths.from(config.filesystem)
5656
val localStorage = FilesystemStorage(config.filesystem)
57+
val datasource = DoobieUtils.getHikariDataSource(config.database)
5758

5859
def usingDatabase(f: SqlDatabase => Future[Unit]): Unit = {
5960
implicit val cs = IO.contextShift(system.dispatcher)
6061
val transactor: Resource[IO, HikariTransactor[IO]] =
61-
DoobieUtils.transactor(config.database)
62+
DoobieUtils.transactor(datasource)
6263
transactor
6364
.use { xa =>
64-
val database = new SqlDatabase(config.database, xa)
65+
val database = new SqlDatabase(datasource, xa)
6566
IO.fromFuture(IO(f(database)))
6667
}
6768
.unsafeRunSync()

modules/data/src/main/scala/scaladex/data/init/Init.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
package scaladex.data.init
2-
32
import scala.concurrent.ExecutionContext
43
import scala.concurrent.Future
54

modules/infra/src/main/scala/scaladex/infra/SqlDatabase.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import scala.concurrent.Future
88

99
import cats.effect.IO
1010
import com.typesafe.scalalogging.LazyLogging
11+
import com.zaxxer.hikari.HikariDataSource
1112
import doobie.implicits._
1213
import scaladex.core.model.Artifact
1314
import scaladex.core.model.ArtifactDependency
@@ -19,7 +20,6 @@ import scaladex.core.model.ProjectDependency
1920
import scaladex.core.model.ReleaseDependency
2021
import scaladex.core.model.UserState
2122
import scaladex.core.service.SchedulerDatabase
22-
import scaladex.infra.config.PostgreSQLConfig
2323
import scaladex.infra.sql.ArtifactDependencyTable
2424
import scaladex.infra.sql.ArtifactTable
2525
import scaladex.infra.sql.DoobieUtils
@@ -31,9 +31,8 @@ import scaladex.infra.sql.ReleaseDependenciesTable
3131
import scaladex.infra.sql.ReleaseTable
3232
import scaladex.infra.sql.UserSessionsTable
3333

34-
class SqlDatabase(conf: PostgreSQLConfig, xa: doobie.Transactor[IO]) extends SchedulerDatabase with LazyLogging {
35-
36-
private val flyway = DoobieUtils.flyway(conf)
34+
class SqlDatabase(datasource: HikariDataSource, xa: doobie.Transactor[IO]) extends SchedulerDatabase with LazyLogging {
35+
private val flyway = DoobieUtils.flyway(datasource)
3736
def migrate: IO[Unit] = IO(flyway.migrate())
3837
def dropTables: IO[Unit] = IO(flyway.clean())
3938

modules/infra/src/main/scala/scaladex/infra/sql/DoobieUtils.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,24 +39,25 @@ object DoobieUtils {
3939

4040
private implicit val cs: ContextShift[IO] =
4141
IO.contextShift(ExecutionContext.global)
42+
4243
def flyway(conf: PostgreSQLConfig): Flyway = {
4344
val datasource = getHikariDataSource(conf)
45+
flyway(datasource)
46+
}
47+
def flyway(datasource: HikariDataSource): Flyway =
4448
Flyway
4549
.configure()
4650
.dataSource(datasource)
4751
.locations("migrations", "scaladex/infra/migrations")
4852
.load()
49-
}
5053

51-
def transactor(conf: PostgreSQLConfig): Resource[IO, HikariTransactor[IO]] = {
52-
val datasource = getHikariDataSource(conf)
54+
def transactor(datasource: HikariDataSource): Resource[IO, HikariTransactor[IO]] =
5355
for {
5456
ce <- ExecutionContexts.fixedThreadPool[IO](32) // our connect EC
5557
be <- Blocker[IO] // our blocking EC
5658
} yield Transactor.fromDataSource[IO](datasource, ce, be)
57-
}
5859

59-
private def getHikariDataSource(conf: PostgreSQLConfig): HikariDataSource = {
60+
def getHikariDataSource(conf: PostgreSQLConfig): HikariDataSource = {
6061
val config: HikariConfig = new HikariConfig()
6162
config.setDriverClassName(conf.driver)
6263
config.setJdbcUrl(conf.url)

modules/infra/src/test/scala/scaladex/infra/BaseDatabaseSuite.scala

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import scala.concurrent.duration.Duration
77

88
import cats.effect.ContextShift
99
import cats.effect.IO
10+
import com.zaxxer.hikari.HikariDataSource
1011
import doobie.scalatest.IOChecker
1112
import doobie.util.transactor.Transactor
1213
import org.scalatest.Assertions
1314
import org.scalatest.BeforeAndAfterEach
1415
import org.scalatest.Suite
15-
import scaladex.infra.SqlDatabase
1616
import scaladex.infra.config.PostgreSQLConfig
17+
import scaladex.infra.sql.DoobieUtils
1718

1819
trait BaseDatabaseSuite extends IOChecker with BeforeAndAfterEach {
1920
self: Assertions with Suite =>
@@ -24,7 +25,6 @@ trait BaseDatabaseSuite extends IOChecker with BeforeAndAfterEach {
2425
private val config: PostgreSQLConfig = PostgreSQLConfig
2526
.load()
2627
.get
27-
.asInstanceOf[PostgreSQLConfig]
2828

2929
override val transactor: Transactor.Aux[IO, Unit] =
3030
Transactor
@@ -35,7 +35,7 @@ trait BaseDatabaseSuite extends IOChecker with BeforeAndAfterEach {
3535
config.pass.decode
3636
)
3737

38-
lazy val database = new SqlDatabase(config, transactor)
38+
lazy val database = new SqlDatabase(BaseDatabaseSuite.datasource, transactor)
3939

4040
override def beforeEach(): Unit =
4141
Await.result(cleanTables(), Duration.Inf)
@@ -48,3 +48,10 @@ trait BaseDatabaseSuite extends IOChecker with BeforeAndAfterEach {
4848
reset.unsafeToFuture()
4949
}
5050
}
51+
object BaseDatabaseSuite {
52+
private val config: PostgreSQLConfig = PostgreSQLConfig
53+
.load()
54+
.get
55+
56+
val datasource: HikariDataSource = DoobieUtils.getHikariDataSource(config)
57+
}

modules/server/src/it/scala/scaladex/RelevanceTest.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@ import cats.effect.ContextShift
1414
import scala.concurrent.ExecutionContext
1515
import scaladex.core.model.Project
1616
import scaladex.core.model.search.SearchParams
17-
import scaladex.infra.ElasticsearchEngine
17+
import scaladex.infra.{ElasticsearchEngine, FilesystemStorage, FlywayMigration, SqlDatabase}
1818
import scaladex.infra.sql.DoobieUtils
1919
import scaladex.server.service.SearchSynchronizer
20-
import scaladex.infra.SqlDatabase
21-
import scaladex.infra.FilesystemStorage
2220
import scaladex.core.model.search.PageParams
2321
import scaladex.server.service.ProjectDependenciesUpdater
2422

@@ -31,18 +29,20 @@ class RelevanceTest extends TestKit(ActorSystem("SbtActorTest")) with AsyncFunSu
3129

3230
override def beforeAll(): Unit = {
3331
implicit val cs: ContextShift[IO] = IO.contextShift(ExecutionContext.global)
34-
val transactor = DoobieUtils.transactor(config.database)
32+
val datasource = DoobieUtils.getHikariDataSource(config.database)
33+
val transactor = DoobieUtils.transactor(datasource)
34+
val flyway = FlywayMigration(datasource)
3535
transactor
3636
.use { xa =>
37-
val database = new SqlDatabase(config.database, xa)
37+
val database = new SqlDatabase(xa)
3838
val filesystem = FilesystemStorage(config.filesystem)
3939

4040
val searchSync = new SearchSynchronizer(database, searchEngine)
4141
val projectDependenciesUpdater = new ProjectDependenciesUpdater(database)
4242

4343
IO.fromFuture(IO {
4444
for {
45-
_ <- Init.run(database, filesystem)
45+
_ <- Init.run(database, filesystem, flyway)
4646
_ <- searchEngine.init(true)
4747
_ <- projectDependenciesUpdater.updateAll()
4848
_ <- searchSync.syncAll()

modules/server/src/main/scala/scaladex/server/Server.scala

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,19 @@ object Server extends LazyLogging {
5353
// because of the sbtResolver mode
5454
val searchEngine = ElasticsearchEngine.open(config.elasticsearch)
5555

56-
val resources =
56+
val resources = {
57+
val datasource = DoobieUtils.getHikariDataSource(config.database)
5758
for {
58-
webPool <- DoobieUtils.transactor(config.database)
59-
schedulerPool <- DoobieUtils.transactor(config.database)
59+
webPool <- DoobieUtils.transactor(datasource)
60+
schedulerPool <- DoobieUtils.transactor(datasource)
6061
publishPool <- ExecutionContexts.fixedThreadPool[IO](8)
61-
} yield (webPool, schedulerPool, publishPool)
62-
62+
} yield (webPool, schedulerPool, publishPool, datasource)
63+
}
6364
resources
6465
.use {
65-
case (webPool, schedulerPool, publishPool) =>
66-
val webDatabase = new SqlDatabase(config.database, webPool)
67-
val schedulerDatabase = new SqlDatabase(config.database, schedulerPool)
66+
case (webPool, schedulerPool, publishPool, datasourceForFlyway) =>
67+
val webDatabase = new SqlDatabase(datasourceForFlyway, webPool)
68+
val schedulerDatabase = new SqlDatabase(datasourceForFlyway, schedulerPool)
6869
val githubService = config.github.token.map(new GithubClient(_))
6970
val paths = DataPaths.from(config.filesystem)
7071
val filesystem = FilesystemStorage(config.filesystem)

0 commit comments

Comments
 (0)