diff options
Diffstat (limited to 'src/main/scala/com/drivergrp/core/database.scala')
-rw-r--r-- | src/main/scala/com/drivergrp/core/database.scala | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/src/main/scala/com/drivergrp/core/database.scala b/src/main/scala/com/drivergrp/core/database.scala index 5eb9d28..f39512c 100644 --- a/src/main/scala/com/drivergrp/core/database.scala +++ b/src/main/scala/com/drivergrp/core/database.scala @@ -1,45 +1,40 @@ package com.drivergrp.core import com.drivergrp.core.id.{Id, Name} - import scala.concurrent.Future +import slick.backend.DatabaseConfig +import slick.driver.JdbcProfile object database { - import slick.backend.DatabaseConfig - import slick.driver.JdbcProfile - - - trait DatabaseModule { + trait Database { val profile: JdbcProfile val database: JdbcProfile#Backend#Database - } - trait ConfigDatabaseModule extends DatabaseModule { + import profile.api._ + + implicit def idColumnType[T] = + MappedColumnType.base[Id[T], Long]({ id => id: Long }, { id => Id[T](id) }) + + implicit def nameColumnType[T] = + MappedColumnType.base[Name[T], String]({ name => name: String }, { name => Name[T](name) }) + } - protected def databaseConfigKey: String + object Database { - private val dbConfig: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig(databaseConfigKey) + def fromConfig(databaseName: String): Database = { + val dbConfig: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig(databaseName) - val profile: JdbcProfile = dbConfig.driver - val database: JdbcProfile#Backend#Database = dbConfig.db + new Database { + val profile: JdbcProfile = dbConfig.driver + val database: JdbcProfile#Backend#Database = dbConfig.db + } + } } trait DatabaseObject { def createTables(): Future[Unit] def disconnect(): Unit } - - trait IdColumnTypes { - this: DatabaseModule => - - import profile.api._ - - implicit def idColumnType[T] = - MappedColumnType.base[Id[T], Long]({ id => id: Long }, { id => Id[T](id) }) - - implicit def nameColumnType[T] = - MappedColumnType.base[Name[T], String]({ name => name: String }, { name => Name[T](name) }) - } } |