From 980deaf70e4e0ba906d0af534aebc839015f0581 Mon Sep 17 00:00:00 2001 From: vlad Date: Sat, 16 Jul 2016 02:43:54 -0400 Subject: Dependency injection through constructor parameters + bug fixes --- src/main/scala/com/drivergrp/core/database.scala | 43 +++++++++++------------- 1 file changed, 19 insertions(+), 24 deletions(-) (limited to 'src/main/scala/com/drivergrp/core/database.scala') 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) }) - } } -- cgit v1.2.3