You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
4.0 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. import com.github.tototoshi.sbt.slick.CodegenPlugin.autoImport.{
  2. slickCodegenDatabasePassword,
  3. slickCodegenDatabaseUrl,
  4. slickCodegenJdbcDriver
  5. }
  6. import play.core.PlayVersion.{current => playVersion}
  7. import _root_.slick.codegen.SourceCodeGenerator
  8. import _root_.slick.{model => m}
  9. lazy val databaseUrl = sys.env.getOrElse("DB_DEFAULT_URL", "jdbc:h2:./test")
  10. lazy val databaseUser = sys.env.getOrElse("DB_DEFAULT_USER", "sa")
  11. lazy val databasePassword = sys.env.getOrElse("DB_DEFAULT_PASSWORD", "")
  12. val FlywayVersion = "6.2.2"
  13. version in ThisBuild := "1.1-SNAPSHOT"
  14. resolvers in ThisBuild += Resolver.sonatypeRepo("releases")
  15. resolvers in ThisBuild += Resolver.sonatypeRepo("snapshots")
  16. libraryDependencies in ThisBuild ++= Seq(
  17. "javax.inject" % "javax.inject" % "1",
  18. "com.google.inject" % "guice" % "4.2.3",
  19. "org.flywaydb" %% "flyway-play" % "6.0.0"
  20. )
  21. scalaVersion in ThisBuild := "2.13.1"
  22. scalacOptions in ThisBuild ++= Seq(
  23. "-encoding",
  24. "UTF-8", // yes, this is 2 args
  25. "-deprecation",
  26. "-feature",
  27. "-unchecked",
  28. "-Xlint",
  29. "-Ywarn-numeric-widen"
  30. )
  31. javacOptions in ThisBuild ++= Seq("-source", "11", "-target", "11")
  32. lazy val flyway = (project in file("modules/flyway"))
  33. .enablePlugins(FlywayPlugin)
  34. .settings(
  35. libraryDependencies += "org.flywaydb" % "flyway-core" % FlywayVersion,
  36. flywayLocations := Seq("classpath:db/migration/default"),
  37. flywayUrl := databaseUrl,
  38. flywayUser := databaseUser,
  39. flywayPassword := databasePassword,
  40. flywayBaselineOnMigrate := true
  41. )
  42. lazy val api = (project in file("modules/api")).settings(
  43. libraryDependencies ++= Seq(
  44. "com.typesafe.play" %% "play-json" % "2.8.1",
  45. "org.typelevel" %% "cats-core" % "2.1.1",
  46. "org.typelevel" %% "cats-effect" % "2.1.4",
  47. "io.monix" %% "monix" % "3.2.2",
  48. "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2",
  49. "ch.qos.logback" % "logback-classic" % "1.2.3"
  50. )
  51. )
  52. lazy val slick = (project in file("modules/slick"))
  53. .enablePlugins(CodegenPlugin)
  54. .settings(
  55. libraryDependencies ++= Seq(
  56. "com.zaxxer" % "HikariCP" % "3.4.2",
  57. "com.typesafe.slick" %% "slick" % "3.3.2",
  58. "com.typesafe.slick" %% "slick-hikaricp" % "3.3.2",
  59. "io.bfil" %% "automapper" % "0.7.0",
  60. "io.scalaland" %% "chimney" % "0.5.2",
  61. "org.typelevel" %% "cats-core" % "2.1.1",
  62. "org.typelevel" %% "cats-effect" % "2.1.4",
  63. "io.monix" %% "monix" % "3.2.2",
  64. "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2",
  65. "ch.qos.logback" % "logback-classic" % "1.2.3"
  66. ),
  67. slickCodegenDatabaseUrl := databaseUrl,
  68. slickCodegenDatabaseUser := databaseUser,
  69. slickCodegenDatabasePassword := databasePassword,
  70. slickCodegenDriver := _root_.slick.jdbc.H2Profile,
  71. slickCodegenJdbcDriver := "org.h2.Driver",
  72. slickCodegenOutputPackage := "com.example.user.slick",
  73. slickCodegenExcludedTables := Seq("schema_version"),
  74. slickCodegenCodeGenerator := { (model: m.Model) =>
  75. new SourceCodeGenerator(model) {
  76. override def Table = new Table(_) {
  77. override def Column = new Column(_) {
  78. override def rawType = model.tpe match {
  79. case "java.sql.Timestamp" =>
  80. "java.time.Instant" // kill j.s.Timestamp
  81. case _ =>
  82. super.rawType
  83. }
  84. }
  85. }
  86. }
  87. },
  88. sourceGenerators in Compile += slickCodegen.taskValue
  89. )
  90. .aggregate(api)
  91. .dependsOn(api)
  92. lazy val root = (project in file("."))
  93. .enablePlugins(PlayScala)
  94. .settings(
  95. name := """play-scala-isolated-slick-example""",
  96. TwirlKeys.templateImports += "com.example.user.User",
  97. libraryDependencies ++= Seq(
  98. guice,
  99. "com.h2database" % "h2" % "1.4.199",
  100. ws % Test,
  101. "org.flywaydb" % "flyway-core" % FlywayVersion % Test,
  102. "org.scalatestplus.play" %% "scalatestplus-play" % "5.0.0" % Test,
  103. "com.typesafe.play" %% "play-json" % "2.8.1",
  104. "io.bfil" %% "automapper" % "0.7.0"
  105. ),
  106. fork in Test := true
  107. )
  108. .aggregate(slick)
  109. .dependsOn(slick)
  110. .dependsOn(flyway)