Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit b809b4b

Browse files
authored
[Extractor]create better file structure for splitAPIs (#270)
* temp * [Extractor] splitAPIs create better file structure
1 parent 1caa535 commit b809b4b

File tree

4 files changed

+300
-232
lines changed

4 files changed

+300
-232
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Extract.cs

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,64 @@ public ExtractCommand()
8282
// pull all apis from service
8383
string apis = await apiExtractor.GetAPIsAsync(sourceApim, resourceGroup);
8484
JObject oApi = JObject.Parse(apis);
85+
86+
// Generate folders based on all apiversionset
87+
var apiDictionary = new Dictionary<string, List<string>>();
8588
for (int i = 0; i < ((JContainer)oApi["value"]).Count; i++)
8689
{
87-
string apiName = ((JValue)oApi["value"][i]["name"]).Value.ToString();
88-
89-
// create folder for each API
90-
string apiFileFolder = String.Concat(@dirName, $@"/{apiName}");
91-
System.IO.Directory.CreateDirectory(apiFileFolder);
92-
93-
// generate templates for each API
94-
await this.GenerateTemplates(sourceApim, destinationApim, apiName, resourceGroup, policyXMLBaseUrl, apiFileFolder, linkedBaseUrl, linkedUrlQueryString, fileNameGenerator, fileNames, fileWriter);
90+
string apiDisplayName = ((JValue)oApi["value"][i]["properties"]["displayName"]).Value.ToString();
91+
if (!apiDictionary.ContainsKey(apiDisplayName))
92+
{
93+
List<string> apiVersionSet = new List<string>();
94+
apiVersionSet.Add(((JValue)oApi["value"][i]["name"]).Value.ToString());
95+
apiDictionary[apiDisplayName] = apiVersionSet;
96+
}
97+
else
98+
{
99+
apiDictionary[apiDisplayName].Add(((JValue)oApi["value"][i]["name"]).Value.ToString());
100+
}
101+
}
95102

96-
Console.WriteLine($@"Finish extracting API {apiName}");
103+
// Generate templates based on each API/APIversionSet
104+
foreach (KeyValuePair<string, List<string>> versionSetEntry in apiDictionary)
105+
{
106+
string apiFileFolder = dirName;
107+
108+
// Check if it's APIVersionSet
109+
if (versionSetEntry.Value.Count > 1)
110+
{
111+
// this API has VersionSet
112+
string apiDisplayName = versionSetEntry.Key;
113+
114+
// create apiVersionSet folder
115+
apiFileFolder = String.Concat(@apiFileFolder, $@"/{apiDisplayName}");
116+
System.IO.Directory.CreateDirectory(apiFileFolder);
117+
118+
// create master templates for each apiVersionSet
119+
string versionSetFolder = String.Concat(@apiFileFolder, fileNames.versionSetMasterFolder);
120+
System.IO.Directory.CreateDirectory(versionSetFolder);
121+
await this.GenerateTemplates(sourceApim, destinationApim, null, versionSetEntry.Value, resourceGroup, policyXMLBaseUrl, versionSetFolder, linkedBaseUrl, linkedUrlQueryString, fileNameGenerator, fileNames, fileWriter);
122+
123+
Console.WriteLine($@"Finish extracting APIVersionSet {versionSetEntry.Key}");
124+
}
125+
126+
// Generate templates
127+
foreach (string apiName in versionSetEntry.Value)
128+
{
129+
// create folder for each API
130+
string tempFileFolder = String.Concat(@apiFileFolder, $@"/{apiName}");
131+
System.IO.Directory.CreateDirectory(tempFileFolder);
132+
133+
// generate templates for each API
134+
await this.GenerateTemplates(sourceApim, destinationApim, apiName, null, resourceGroup, policyXMLBaseUrl, tempFileFolder, linkedBaseUrl, linkedUrlQueryString, fileNameGenerator, fileNames, fileWriter);
135+
136+
Console.WriteLine($@"Finish extracting API {apiName}");
137+
}
97138
}
98139
}
99140
else
100141
{
101-
await this.GenerateTemplates(sourceApim, destinationApim, singleApiName, resourceGroup, policyXMLBaseUrl, dirName, linkedBaseUrl, linkedUrlQueryString, fileNameGenerator, fileNames, fileWriter);
142+
await this.GenerateTemplates(sourceApim, destinationApim, singleApiName, null, resourceGroup, policyXMLBaseUrl, dirName, linkedBaseUrl, linkedUrlQueryString, fileNameGenerator, fileNames, fileWriter);
102143
}
103144
Console.WriteLine("Templates written to output location");
104145
Console.WriteLine("Press any key to exit process:");
@@ -113,7 +154,7 @@ public ExtractCommand()
113154
}
114155
});
115156
}
116-
private async Task<Boolean> GenerateTemplates(string sourceApim, string destinationApim, string singleApiName, string resourceGroup, string policyXMLBaseUrl, string dirName, string linkedBaseUrl, string linkedUrlQueryString, FileNameGenerator fileNameGenerator, FileNames fileNames, FileWriter fileWriter)
157+
private async Task<Boolean> GenerateTemplates(string sourceApim, string destinationApim, string singleApiName, List<string> multipleApiNams, string resourceGroup, string policyXMLBaseUrl, string dirName, string linkedBaseUrl, string linkedUrlQueryString, FileNameGenerator fileNameGenerator, FileNames fileNames, FileWriter fileWriter)
117158
{
118159
// initialize entity extractor classes
119160
APIExtractor apiExtractor = new APIExtractor(fileWriter);
@@ -129,7 +170,7 @@ private async Task<Boolean> GenerateTemplates(string sourceApim, string destinat
129170

130171
// extract templates from apim service
131172
Template globalServicePolicyTemplate = await policyExtractor.GenerateGlobalServicePolicyTemplateAsync(sourceApim, resourceGroup, policyXMLBaseUrl, dirName);
132-
Template apiTemplate = await apiExtractor.GenerateAPIsARMTemplateAsync(sourceApim, resourceGroup, singleApiName, policyXMLBaseUrl, dirName);
173+
Template apiTemplate = await apiExtractor.GenerateAPIsARMTemplateAsync(sourceApim, resourceGroup, singleApiName, multipleApiNams, policyXMLBaseUrl, dirName);
133174
List<TemplateResource> apiTemplateResources = apiTemplate.resources.ToList();
134175
Template apiVersionSetTemplate = await apiVersionSetExtractor.GenerateAPIVersionSetsARMTemplateAsync(sourceApim, resourceGroup, singleApiName, apiTemplateResources, policyXMLBaseUrl);
135176
Template authorizationServerTemplate = await authorizationServerExtractor.GenerateAuthorizationServersARMTemplateAsync(sourceApim, resourceGroup, singleApiName, apiTemplateResources, policyXMLBaseUrl);

src/APIM_ARMTemplate/apimtemplate/Common/FileHandlers/FileNameGenerator.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public FileNames GenerateFileNames(string apimServiceName)
2121
parameters = $@"/{apimServiceName}-parameters.json",
2222
linkedMaster = $@"/{apimServiceName}-master.template.json",
2323
apis = "/Apis",
24-
splitAPIs = "/SplitAPIs"
24+
splitAPIs = "/SplitAPIs",
25+
versionSetMasterFolder = "/VersionSetMasterFolder"
2526
};
2627
}
2728

@@ -67,5 +68,6 @@ public class FileNames
6768
public string linkedMaster { get; set; }
6869
public string apis { get; set; }
6970
public string splitAPIs { get; set; }
71+
public string versionSetMasterFolder { get; set; }
7072
}
7173
}

0 commit comments

Comments
 (0)