import com.github.tototoshi.sbt.slick.CodegenPlugin.autoImport.{ slickCodegenDatabasePassword, slickCodegenDatabaseUrl, slickCodegenJdbcDriver } import play.core.PlayVersion.{current => playVersion} import _root_.slick.codegen.SourceCodeGenerator import _root_.slick.{model => m} lazy val databaseUrl = sys.env.getOrElse("DB_DEFAULT_URL", "jdbc:h2:./test") lazy val databaseUser = sys.env.getOrElse("DB_DEFAULT_USER", "sa") lazy val databasePassword = sys.env.getOrElse("DB_DEFAULT_PASSWORD", "") val FlywayVersion = "6.2.2" version in ThisBuild := "1.1-SNAPSHOT" resolvers in ThisBuild += Resolver.sonatypeRepo("releases") resolvers in ThisBuild += Resolver.sonatypeRepo("snapshots") libraryDependencies in ThisBuild ++= Seq( "javax.inject" % "javax.inject" % "1", "com.google.inject" % "guice" % "4.2.3", "org.flywaydb" %% "flyway-play" % "6.0.0" ) scalaVersion in ThisBuild := "2.13.1" scalacOptions in ThisBuild ++= Seq( "-encoding", "UTF-8", // yes, this is 2 args "-deprecation", "-feature", "-unchecked", "-Xlint", "-Ywarn-numeric-widen" ) javacOptions in ThisBuild ++= Seq("-source", "11", "-target", "11") lazy val flyway = (project in file("modules/flyway")) .enablePlugins(FlywayPlugin) .settings( libraryDependencies += "org.flywaydb" % "flyway-core" % FlywayVersion, flywayLocations := Seq("classpath:db/migration/default"), flywayUrl := databaseUrl, flywayUser := databaseUser, flywayPassword := databasePassword, flywayBaselineOnMigrate := true ) lazy val api = (project in file("modules/api")).settings( libraryDependencies ++= Seq( "com.typesafe.play" %% "play-json" % "2.8.1", "org.typelevel" %% "cats-core" % "2.1.1", "org.typelevel" %% "cats-effect" % "2.1.4", "io.monix" %% "monix" % "3.2.2", "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2", "ch.qos.logback" % "logback-classic" % "1.2.3" ) ) lazy val slick = (project in file("modules/slick")) .enablePlugins(CodegenPlugin) .settings( libraryDependencies ++= Seq( "com.zaxxer" % "HikariCP" % "3.4.2", "com.typesafe.slick" %% "slick" % "3.3.2", "com.typesafe.slick" %% "slick-hikaricp" % "3.3.2", "io.bfil" %% "automapper" % "0.7.0", "io.scalaland" %% "chimney" % "0.5.2", "org.typelevel" %% "cats-core" % "2.1.1", "org.typelevel" %% "cats-effect" % "2.1.4", "io.monix" %% "monix" % "3.2.2", "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2", "ch.qos.logback" % "logback-classic" % "1.2.3" ), slickCodegenDatabaseUrl := databaseUrl, slickCodegenDatabaseUser := databaseUser, slickCodegenDatabasePassword := databasePassword, slickCodegenDriver := _root_.slick.jdbc.H2Profile, slickCodegenJdbcDriver := "org.h2.Driver", slickCodegenOutputPackage := "com.example.user.slick", slickCodegenExcludedTables := Seq("schema_version"), slickCodegenCodeGenerator := { (model: m.Model) => new SourceCodeGenerator(model) { override def Table = new Table(_) { override def Column = new Column(_) { override def rawType = model.tpe match { case "java.sql.Timestamp" => "java.time.Instant" // kill j.s.Timestamp case _ => super.rawType } } } } }, sourceGenerators in Compile += slickCodegen.taskValue ) .aggregate(api) .dependsOn(api) lazy val root = (project in file(".")) .enablePlugins(PlayScala) .settings( name := """play-scala-isolated-slick-example""", TwirlKeys.templateImports += "com.example.user.User", libraryDependencies ++= Seq( guice, "com.h2database" % "h2" % "1.4.199", ws % Test, "org.flywaydb" % "flyway-core" % FlywayVersion % Test, "org.scalatestplus.play" %% "scalatestplus-play" % "5.0.0" % Test, "com.typesafe.play" %% "play-json" % "2.8.1", "io.bfil" %% "automapper" % "0.7.0" ), fork in Test := true ) .aggregate(slick) .dependsOn(slick) .dependsOn(flyway)