11using System . Collections . Generic ;
2+ using System . Linq ;
23using Simplify . Web . Meta ;
34using Simplify . Web . Postman . Models ;
45
@@ -23,11 +24,39 @@ public void Build(CollectionModel model)
2324 continue ;
2425
2526 foreach ( var route in item . ExecParameters ! . Routes )
26- model . Items . Add ( BuildCollectionItem ( item , route ) ) ;
27+ BuildCollectionItems ( model , 0 , BuildRequestCollectionItem ( item , route ) ) ;
2728 }
2829 }
2930
30- private static CollectionItem BuildCollectionItem ( IControllerMetaData metaData , KeyValuePair < HttpMethod , string > route ) =>
31+ private static void BuildCollectionItems ( CollectionItem currentLevelContainer , int currentLevel , CollectionItem item )
32+ {
33+ // If recursion reached request level
34+ if ( currentLevel == item . Request . Url . Path . Count - 1 )
35+ {
36+ if ( currentLevelContainer . Items == null )
37+ currentLevelContainer . Items = new List < CollectionItem > ( ) ;
38+
39+ currentLevelContainer . Items . Add ( item ) ;
40+ return ;
41+ }
42+
43+ // If path recursion not reached request level
44+
45+ var containerName = item . Request . Url . Path [ currentLevel ] ;
46+
47+ var container = currentLevelContainer . Items . FirstOrDefault ( x => x . Name == containerName ) ;
48+
49+ if ( container == null )
50+ currentLevelContainer . Items . Add ( container = new CollectionItem
51+ {
52+ Name = containerName ,
53+ Items = new List < CollectionItem > ( )
54+ } ) ;
55+
56+ BuildCollectionItems ( container , currentLevel + 1 , item ) ;
57+ }
58+
59+ private static CollectionItem BuildRequestCollectionItem ( IControllerMetaData metaData , KeyValuePair < HttpMethod , string > route ) =>
3160 new ( )
3261 {
3362 Name = BuildName ( metaData ) ,
0 commit comments