@@ -29,6 +29,9 @@ type ModelFilter struct {
29
29
Components bool
30
30
Relationships bool
31
31
Status string
32
+ // When Trim is true it will only send necessary models data
33
+ // like: component count, relationship count, id and name of model
34
+ Trim bool
32
35
}
33
36
34
37
// Create the filter from map[string]interface{}
@@ -182,27 +185,48 @@ func (mf *ModelFilter) Get(db *database.Handler) ([]entity.Entity, int64, int, e
182
185
for _ , modelDB := range modelWithCategories {
183
186
// resolve for loop scope
184
187
_modelDB := modelDB
185
- if includeComponents {
186
- var components []component.ComponentDefinition
187
- finder := db .Model (& component.ComponentDefinition {}).
188
- Select ("component_definition_dbs.id, component_definition_dbs.component, component_definition_dbs.display_name, component_definition_dbs.metadata, component_definition_dbs.schema_version, component_definition_dbs.version,component_definition_dbs.styles,component_definition_dbs.capabilities" ).
189
- Where ("component_definition_dbs.model_id = ?" , _modelDB .Id )
190
- if err := finder .Scan (& components ).Error ; err != nil {
191
- return nil , 0 , 0 , err
188
+ var componentCount int64
189
+ db .Model (& component.ComponentDefinition {}).Where ("component_definition_dbs.model_id = ?" , _modelDB .Id ).Count (& componentCount )
190
+ var relationshipCount int64
191
+ db .Model (& relationship.RelationshipDefinition {}).Where ("relationship_definition_dbs.model_id = ?" , _modelDB .Id ).Count (& relationshipCount )
192
+ _modelDB .ComponentsCount = int (componentCount )
193
+ _modelDB .RelationshipsCount = int (relationshipCount )
194
+
195
+ // If Trim is true, only include the id, name, counts and metadata
196
+ if mf .Trim {
197
+ trimmedModel := & model.ModelDefinition {
198
+ Id : _modelDB .Id ,
199
+ Name : _modelDB .Name ,
200
+ DisplayName : _modelDB .DisplayName ,
201
+ Metadata : _modelDB .Metadata ,
202
+ ComponentsCount : int (componentCount ),
203
+ RelationshipsCount : int (relationshipCount ),
192
204
}
193
- _modelDB .Components = components
194
- }
195
- if includeRelationships {
196
- var relationships []relationship.RelationshipDefinition
197
- finder := db .Model (& relationship.RelationshipDefinition {}).
198
- Select ("relationship_definition_dbs.*" ).
199
- Where ("relationship_definition_dbs.model_id = ?" , _modelDB .Id )
200
- if err := finder .Scan (& relationships ).Error ; err != nil {
201
- return nil , 0 , 0 , err
205
+ defs = append (defs , trimmedModel )
206
+
207
+ } else {
208
+ if includeComponents {
209
+ var components []component.ComponentDefinition
210
+ finder := db .Model (& component.ComponentDefinition {}).
211
+ Select ("component_definition_dbs.*" ).
212
+ Where ("component_definition_dbs.model_id = ?" , _modelDB .Id )
213
+ if err := finder .Scan (& components ).Error ; err != nil {
214
+ return nil , 0 , 0 , err
215
+ }
216
+ _modelDB .Components = components
217
+ }
218
+ if includeRelationships {
219
+ var relationships []relationship.RelationshipDefinition
220
+ finder := db .Model (& relationship.RelationshipDefinition {}).
221
+ Select ("relationship_definition_dbs.*" ).
222
+ Where ("relationship_definition_dbs.model_id = ?" , _modelDB .Id )
223
+ if err := finder .Scan (& relationships ).Error ; err != nil {
224
+ return nil , 0 , 0 , err
225
+ }
226
+ _modelDB .Relationships = relationships
202
227
}
203
- _modelDB . Relationships = relationships
228
+ defs = append ( defs , & _modelDB )
204
229
}
205
- defs = append (defs , & _modelDB )
206
230
}
207
231
return defs , count , countUniqueModels (modelWithCategories ), nil
208
232
}
0 commit comments