I did in slick abstract table:
abstract class SubResourceTabledef[E, A, I, U](tag: Tag, name: String) extends Table[E](tag, name) {
val id = column[Long]("id", O.PrimaryKey, O.AutoInc)
val version = column[Long]("version", O.Default(0L))
val resource_id = column[Long]("resource_id")
def * : ProvenShape[E]
def allMapped: MappedProjection[E, A]
def insertMapped: MappedProjection[E, I]
def updateMapped: MappedProjection[E, U]
}
so later based on this I can create:
type EntityType = SomeThingResource
type AllProjectionTuple = (Option[Long], Option[Long], DateTime, Option[Long], Option[Long], Option[Long], Long)
type InsertProjectionTuple = (Option[Long], Option[Long], Option[Long], Long)
type UpdateProjectionTuple = (Long, Option[Long], Option[Long], Option[Long])
class SomeThingResourceTabledef(tag: Tag) extends SubResourceTabledef[SomeThingResource, AllProjectionTuple, InsertProjectionTuple, UpdateProjectionTuple](tag, tablenameConverter("Table_name")) {
val a = column[Option[Long]]("a")
val b = column[Option[Long]]("b")
val c = column[Option[Long]]("c")
...
}
I can create TableQuery by this:
object TQDomain extends TableQuery(new ArticleGoodsMovementTabledef(_))
but then I dont know how to pass it to my repository where I do all queries:
class SubResourceCommonRepository[Entity <: SubResource, A, I, U, TableDef <: SubResourceTabledef[Entity, A, I, U]](subResourceTabledef: TableDef)
Any ideas how to deal with it ? thanks!