diff options
author | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-20 01:54:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-20 01:54:57 -0500 |
commit | 687919e7c163e1ff8a002f1a2c24e4b37f75f20d (patch) | |
tree | b185f9e8c9d0bf515b989ba8c13dc0f264e6fd25 /src/main/scala/xyz/driver/core/database/database.scala | |
parent | dd8cbb3ada14a4f05d5683b90a5b83dc4b3b35f5 (diff) | |
parent | f0a5e41ec45d2420ba7173e156806f81701f9796 (diff) | |
download | driver-core-687919e7c163e1ff8a002f1a2c24e4b37f75f20d.tar.gz driver-core-687919e7c163e1ff8a002f1a2c24e4b37f75f20d.tar.bz2 driver-core-687919e7c163e1ff8a002f1a2c24e4b37f75f20d.zip |
Merge pull request #8 from drivergroup/dal-improvementsv0.9.29
Dal improvements
Diffstat (limited to 'src/main/scala/xyz/driver/core/database/database.scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/database/database.scala | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/database/database.scala b/src/main/scala/xyz/driver/core/database/database.scala new file mode 100644 index 0000000..a8aec63 --- /dev/null +++ b/src/main/scala/xyz/driver/core/database/database.scala @@ -0,0 +1,76 @@ +package xyz.driver.core + +import scala.concurrent.Future + +import slick.backend.DatabaseConfig +import slick.driver.JdbcProfile +import xyz.driver.core.time.Time +import xyz.driver.core.date.Date + +package database { + + trait Database { + val profile: JdbcProfile + val database: JdbcProfile#Backend#Database + } + + object Database { + + def fromConfig(databaseName: String): Database = { + val dbConfig: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig(databaseName) + + new Database { + val profile: JdbcProfile = dbConfig.driver + val database: JdbcProfile#Backend#Database = dbConfig.db + } + } + } + + trait ColumnTypes { + val profile: JdbcProfile + import profile.api._ + + implicit def `xyz.driver.core.Id.columnType`[T]: BaseColumnType[Id[T]] + + implicit def `xyz.driver.core.Name.columnType`[T]: BaseColumnType[Name[T]] = + MappedColumnType.base[Name[T], String](_.value, Name[T](_)) + + implicit def `xyz.driver.core.time.Time.columnType`: BaseColumnType[Time] = + MappedColumnType.base[Time, Long](_.millis, Time(_)) + + implicit def `xyz.driver.core.time.Date.columnType`: BaseColumnType[Date] = + MappedColumnType.base[Date, java.sql.Date](dateToSqlDate(_), sqlDateToDate(_)) + } + + object ColumnTypes { + trait UUID extends ColumnTypes { + import profile.api._ + + override implicit def `xyz.driver.core.Id.columnType`[T] = + MappedColumnType + .base[Id[T], java.util.UUID](id => java.util.UUID.fromString(id.value), uuid => Id[T](uuid.toString)) + } + trait SerialId extends ColumnTypes { + import profile.api._ + + override implicit def `xyz.driver.core.Id.columnType`[T] = + MappedColumnType.base[Id[T], Long](_.value.toLong, serialId => Id[T](serialId.toString)) + } + trait NaturalId extends ColumnTypes { + import profile.api._ + + override implicit def `xyz.driver.core.Id.columnType`[T] = + MappedColumnType.base[Id[T], String](_.value, Id[T](_)) + } + } + + trait DatabaseObject extends ColumnTypes { + def createTables(): Future[Unit] + def disconnect(): Unit + } + + abstract class DatabaseObjectAdapter extends DatabaseObject { + def createTables(): Future[Unit] = Future.successful(()) + def disconnect(): Unit = {} + } +} |