aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/database/database.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/core/database/database.scala')
-rw-r--r--src/main/scala/xyz/driver/core/database/database.scala37
1 files changed, 37 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
index bd20b54..f3630ff 100644
--- a/src/main/scala/xyz/driver/core/database/database.scala
+++ b/src/main/scala/xyz/driver/core/database/database.scala
@@ -126,6 +126,33 @@ package database {
}
}
+ trait GenericIdColumnTypes[IdType] extends ColumnTypes {
+ import profile.api._
+ implicit def `xyz.driver.core.GenericId.columnType`[T]: BaseColumnType[GenericId[T, IdType]]
+ }
+
+ object GenericIdColumnTypes {
+ trait UUID extends GenericIdColumnTypes[java.util.UUID] {
+ import profile.api._
+
+ override implicit def `xyz.driver.core.GenericId.columnType`[T]: BaseColumnType[GenericId[T, java.util.UUID]] =
+ MappedColumnType
+ .base[GenericId[T, java.util.UUID], java.util.UUID](id => id.value, uuid => UuidId[T](uuid))
+ }
+ trait SerialId extends GenericIdColumnTypes[Long] {
+ import profile.api._
+
+ override implicit def `xyz.driver.core.GenericId.columnType`[T]: BaseColumnType[GenericId[T, Long]] =
+ MappedColumnType.base[GenericId[T, Long], Long](_.value, serialId => NumericId[T](serialId))
+ }
+ trait NaturalId extends GenericIdColumnTypes[String] {
+ import profile.api._
+
+ override implicit def `xyz.driver.core.GenericId.columnType`[T]: BaseColumnType[GenericId[T, String]] =
+ MappedColumnType.base[GenericId[T, String], String](_.value, Id[T])
+ }
+ }
+
trait TimestampColumnTypes extends ColumnTypes {
import profile.api._
implicit def `xyz.driver.core.time.Time.columnType`: BaseColumnType[Time]
@@ -166,6 +193,16 @@ package database {
def naturalKeyMapper[T] = MappedColumnType.base[Id[T], String](_.value, Id[T])
}
+ trait GenericKeyMappers extends ColumnTypes {
+ import profile.api._
+
+ def uuidKeyMapper[T] =
+ MappedColumnType
+ .base[UuidId[T], java.util.UUID](id => id.value, uuid => UuidId[T](uuid))
+ def serialKeyMapper[T] = MappedColumnType.base[NumericId[T], Long](_.value, serialId => NumericId[T](serialId))
+ def naturalKeyMapper[T] = MappedColumnType.base[Id[T], String](_.value, Id[T])
+ }
+
trait DatabaseObject extends ColumnTypes {
def createTables(): Future[Unit]
def disconnect(): Unit