@@ -4,6 +4,7 @@ import com.kyleu.projectile.models.database.schema.ForeignKey
4
4
import com .kyleu .projectile .models .export .ExportModel
5
5
import com .kyleu .projectile .models .export .config .ExportConfiguration
6
6
import com .kyleu .projectile .models .export .typ .FieldType
7
+ import com .kyleu .projectile .models .feature .ModelFeature
7
8
import com .kyleu .projectile .models .output .ExportHelper
8
9
import com .kyleu .projectile .models .output .file .ScalaFile
9
10
@@ -64,30 +65,33 @@ object TableHelper {
64
65
}
65
66
}
66
67
67
- def addExtensions (config : ExportConfiguration , file : ScalaFile , model : ExportModel ) = if (model.foreignKeys.nonEmpty) {
68
- file.addImport(Seq (" scala" , " language" ), " higherKinds" )
69
- file.add()
70
- file.add(s " implicit class ${model.className}TableExtensions[C[_]](q: Query[ ${model.className}Table, ${model.className}, C]) { " , 1 )
71
- model.foreignKeys.groupBy(_.targetTable).toList.foreach { fk =>
72
- val target = config.getModel(fk._1, " tableExtensions" )
73
- file.addImport(target.slickPackage(config), target.className + " Table" )
68
+ def addExtensions (config : ExportConfiguration , file : ScalaFile , model : ExportModel ) = {
69
+ val keys = model.foreignKeys.filter(fk => config.models.exists(m => m.key == fk.targetTable && m.features(ModelFeature .Slick )))
70
+ if (keys.nonEmpty) {
71
+ file.addImport(Seq (" scala" , " language" ), " higherKinds" )
72
+ file.add()
73
+ file.add(s " implicit class ${model.className}TableExtensions[C[_]](q: Query[ ${model.className}Table, ${model.className}, C]) { " , 1 )
74
+ keys.groupBy(_.targetTable).toList.foreach { fk =>
75
+ val target = config.getModel(fk._1, " tableExtensions" )
76
+ file.addImport(target.slickPackage(config), target.className + " Table" )
74
77
75
- def proc (fk : ForeignKey , key : String ) = fk.references match {
76
- case ref :: Nil =>
77
- val srcCol = model.getField(ref.source)
78
- val tgtCol = target.getField(ref.target)
79
- file.add(s " def with $key = q.join( ${target.className}Table.query).on(_. ${srcCol.propertyName} === _. ${tgtCol.propertyName}) " )
80
- file.add(s " def with ${key}Opt = q.joinLeft( ${target.className}Table.query).on(_. ${srcCol.propertyName} === _. ${tgtCol.propertyName}) " )
81
- case _ => // noop
82
- }
78
+ def proc (fk : ForeignKey , key : String ) = fk.references match {
79
+ case ref :: Nil =>
80
+ val srcCol = model.getField(ref.source)
81
+ val tgtCol = target.getField(ref.target)
82
+ file.add(s " def with $key = q.join( ${target.className}Table.query).on(_. ${srcCol.propertyName} === _. ${tgtCol.propertyName}) " )
83
+ file.add(s " def with ${key}Opt = q.joinLeft( ${target.className}Table.query).on(_. ${srcCol.propertyName} === _. ${tgtCol.propertyName}) " )
84
+ case _ => // noop
85
+ }
83
86
84
- fk._2 match {
85
- case solo :: Nil => proc(solo, target.className)
86
- case multiple => multiple.foreach { m =>
87
- proc(m, s " ${target.className}By ${ExportHelper .toClassName(m.references.headOption.getOrElse(throw new IllegalStateException ()).source)}" )
87
+ fk._2 match {
88
+ case solo :: Nil => proc(solo, target.className)
89
+ case multiple => multiple.foreach { m =>
90
+ proc(m, s " ${target.className}By ${ExportHelper .toClassName(m.references.headOption.getOrElse(throw new IllegalStateException ()).source)}" )
91
+ }
88
92
}
89
93
}
94
+ file.add(" }" , - 1 )
90
95
}
91
- file.add(" }" , - 1 )
92
96
}
93
97
}
0 commit comments