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.

116 lines
3.8 KiB

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. // "joda-time" % "joda-time" % "2.10.2",
  19. // "org.joda" % "joda-convert" % "2.2.1",
  20. "com.google.inject" % "guice" % "4.2.3"
  21. )
  22. scalaVersion in ThisBuild := "2.13.1"
  23. scalacOptions in ThisBuild ++= Seq(
  24. "-encoding",
  25. "UTF-8", // yes, this is 2 args
  26. "-deprecation",
  27. "-feature",
  28. "-unchecked",
  29. "-Xlint",
  30. "-Ywarn-numeric-widen"
  31. )
  32. javacOptions in ThisBuild ++= Seq("-source", "1.8", "-target", "1.8")
  33. lazy val flyway = (project in file("modules/flyway"))
  34. .enablePlugins(FlywayPlugin)
  35. .settings(
  36. libraryDependencies += "org.flywaydb" % "flyway-core" % FlywayVersion,
  37. flywayLocations := Seq("classpath:db/migration"),
  38. flywayUrl := databaseUrl,
  39. flywayUser := databaseUser,
  40. flywayPassword := databasePassword,
  41. flywayBaselineOnMigrate := true
  42. )
  43. lazy val api = (project in file("modules/api")).settings(
  44. libraryDependencies ++= Seq(
  45. "com.typesafe.play" %% "play-json" % "2.8.1",
  46. ),
  47. )
  48. lazy val slick = (project in file("modules/slick"))
  49. .enablePlugins(CodegenPlugin)
  50. .settings(
  51. libraryDependencies ++= Seq(
  52. "com.zaxxer" % "HikariCP" % "3.4.2",
  53. "com.typesafe.slick" %% "slick" % "3.3.2",
  54. "com.typesafe.slick" %% "slick-hikaricp" % "3.3.2",
  55. "io.bfil" %% "automapper" % "0.7.0",
  56. "io.scalaland" %% "chimney" % "0.5.2"
  57. // "com.github.tototoshi" %% "slick-joda-mapper" % "2.4.1"
  58. ),
  59. slickCodegenDatabaseUrl := databaseUrl,
  60. slickCodegenDatabaseUser := databaseUser,
  61. slickCodegenDatabasePassword := databasePassword,
  62. slickCodegenDriver := _root_.slick.jdbc.H2Profile,
  63. slickCodegenJdbcDriver := "org.h2.Driver",
  64. slickCodegenOutputPackage := "com.example.user.slick",
  65. slickCodegenExcludedTables := Seq("schema_version"),
  66. slickCodegenCodeGenerator := { (model: m.Model) =>
  67. new SourceCodeGenerator(model) {
  68. // override def code =
  69. // "import com.github.tototoshi.slick.H2JodaSupport._\n" + "import org.joda.time.DateTime\n" + super.code
  70. override def Table = new Table(_) {
  71. override def Column = new Column(_) {
  72. override def rawType = model.tpe match {
  73. case "java.sql.Timestamp" =>
  74. "java.time.Instant" // kill j.s.Timestamp
  75. case _ =>
  76. super.rawType
  77. }
  78. }
  79. }
  80. }
  81. },
  82. sourceGenerators in Compile += slickCodegen.taskValue
  83. )
  84. .aggregate(api)
  85. .dependsOn(api)
  86. lazy val root = (project in file("."))
  87. .enablePlugins(PlayScala)
  88. .settings(
  89. name := """play-scala-isolated-slick-example""",
  90. TwirlKeys.templateImports += "com.example.user.User",
  91. libraryDependencies ++= Seq(
  92. guice,
  93. "com.h2database" % "h2" % "1.4.199",
  94. ws % Test,
  95. "org.flywaydb" % "flyway-core" % FlywayVersion % Test,
  96. "com.typesafe.play" %% "play-slick" % "5.0.0",
  97. "org.scalatestplus.play" %% "scalatestplus-play" % "5.0.0" % Test,
  98. "com.typesafe.play" %% "play-json" % "2.8.1",
  99. "io.bfil" %% "automapper" % "0.7.0"
  100. ),
  101. fork in Test := true
  102. )
  103. .aggregate(slick)
  104. .dependsOn(slick)
  105. // fork := true