@@ -2,7 +2,7 @@ package com.sneaksanddata.arcane.framework
22package models .cdm
33
44import models .*
5- import models .schemas .*
5+ import models .schemas .{ given_CanAdd_ArcaneSchema , * }
66
77import upickle .default .*
88
@@ -49,6 +49,8 @@ case class SimpleCdmEntity(
4949case class SimpleCdmModel (name : String , description : String , version : String , entities : Seq [SimpleCdmEntity ])
5050 derives ReadWriter
5151
52+ type IndexedSimpleCdmAttribute = (SimpleCdmAttribute , Int )
53+
5254given Conversion [SimpleCdmAttribute , ArcaneSchemaField ] with
5355 override def apply (entity : SimpleCdmAttribute ): ArcaneSchemaField = entity.dataType match
5456 case " guid" => Field (name = entity.name, fieldType = ArcaneType .StringType )
@@ -60,8 +62,21 @@ given Conversion[SimpleCdmAttribute, ArcaneSchemaField] with
6062 case " boolean" => Field (name = entity.name, fieldType = ArcaneType .BooleanType )
6163 case _ => Field (name = entity.name, fieldType = ArcaneType .StringType )
6264
65+ given Conversion [IndexedSimpleCdmAttribute , IndexedField ] with
66+ override def apply (indexedAttribute : (SimpleCdmAttribute , Int )): IndexedField =
67+ val field : ArcaneSchemaField = indexedAttribute._1
68+ IndexedField (name = field.name, fieldType = field.fieldType, fieldId = indexedAttribute._2)
69+
6370given Conversion [SimpleCdmEntity , ArcaneSchema ] with
64- override def apply (entity : SimpleCdmEntity ): ArcaneSchema = entity.attributes.map(implicitly) :+ MergeKeyField
71+ override def apply (entity : SimpleCdmEntity ): ArcaneSchema =
72+ val baseSchema = entity.attributes
73+ .foldLeft((ArcaneSchema .empty(), 0 )) { case ((agg, fieldIndex), attribute) =>
74+ val indexedAttr : IndexedField = (attribute, fieldIndex)
75+ (agg.addIndexedField(indexedAttr.name, indexedAttr.fieldType, indexedAttr.fieldId), fieldIndex + 1 )
76+ }
77+ ._1
78+
79+ baseSchema.addIndexedField(MergeKeyField .name, MergeKeyField .fieldType, baseSchema.length)
6580
6681object SimpleCdmModel :
6782 // number of fields in the schema of each entity which do not originate from CDM
0 commit comments