in src/Generators/CodeGenerator/CodeGenerator.ts [87:161]
export function generateFlowAppForMicroservice(
name: string,
abi: string,
contractAddress: string,
solFilePath: string,
) {
const { variables, functionsDefinitions } = parseSolidityContract(solFilePath);
const flowApp = getFlowAppTemplate();
const definition = getDefinitionTemplate();
const switchBlock = getSwitchTemplate();
const connectionReferenceName = `shared_${propertyBlockchainethereum}`;
for (const item of [...variables, ...functionsDefinitions]) {
const actions: { [key: string]: any } = {};
const bodyParameters: { [key: string]: any } = {};
const action = getActionFlowAppTemplate();
const actionResponseData = getActionResponseTemplate();
if (item.type === 'FunctionDefinition') {
for (const parameter of item.parameters) {
bodyParameters[parameter.name] = `@triggerBody()?['${propertyInputParameters}']?['${parameter.name}']`;
action.inputs.parameters[`parameters/${parameter.name}`] = `${propertyInputParameters}.${parameter.name}`;
}
if (item.stateMutability === 'view' || item.stateMutability === 'pure') {
action.inputs.host.operationId = item.parameters.length ? 'ExecuteSmartContractFunction' : 'GetSmartContractProperties';
} else {
action.inputs.host.operationId = 'ExecuteContractFunction';
}
actionResponseData.inputs.body = item.returnParameters
? `@outputs('${item.name}')?['body/Function Output']`
: `@body('${item.name}')`;
} else {
action.inputs.host.operationId = 'GetSmartContractProperties';
actionResponseData.inputs.body = `@outputs('${item.name}')?['body/${item.name}']`;
}
action.inputs.host.connectionName = connectionReferenceName;
action.inputs.host.apiId = `/providers/Microsoft.PowerApps/apis/${connectionReferenceName}`;
action.inputs.parameters.contractAddress = contractAddress;
action.inputs.parameters.functionName = item.name!;
action.inputs.parameters.abi = abi;
actionResponseData.runAfter[item.name!] = [ 'Succeeded' ];
actions[item.name!] = action;
actions[`${item.name}Response`] = actionResponseData;
const caseBlock = getCaseTemplate();
caseBlock.case = item.name!;
caseBlock.actions = actions;
switchBlock.Switch.cases[`Case_${item.name}`] = caseBlock;
}
switchBlock.Switch.expression = `@triggerBody()?['${propertyFunctionName}']`;
definition.actions = switchBlock;
definition.triggers.manual.inputs.schema.properties[propertyInputParameters] = { type: 'object' };
definition.triggers.manual.inputs.schema.properties[propertyFunctionName] = { type: 'string' };
const clientData = getClientDataTemplate();
clientData.properties.definition = definition;
clientData.properties.displayName = name;
clientData.properties.connectionReferences[connectionReferenceName] = getConnectionReferenceTemplate();
clientData.properties.connectionReferences[connectionReferenceName].id = `/providers/Microsoft.PowerApps/apis/${connectionReferenceName}`;
flowApp.clientdata = JSON.stringify(clientData);
flowApp.name = name;
return flowApp;
}