Example #1
0
        private static string GetServiceCheck(Type t)
        {
            var sb = new StringBuilder();
            var i  = 0;

            foreach (var p in t.GetProperties())
            {
                if (p.Name == t.Name + "Guid" || p.Name == t.Name + "Id" || p.Name == "CreatedBy" || p.Name == "ModifiedBy" || p.Name == "CreatedDate" || p.Name == "ModifiedDate")
                {
                    continue;
                }

                var isNotNull = false;
                var rlst      = p.GetCustomAttributes(typeof(NotNullAttribute), true);
                if (!(rlst == null || rlst.Length == 0))
                {
                    isNotNull = true;
                }

                var isString = false;
                var sllst    = p.GetCustomAttributes(typeof(StringLengthAttribute), true);
                if (!(sllst == null || sllst.Length == 0))
                {
                    isString = true;
                }

                var isLong = (p.PropertyType == typeof(long) || p.PropertyType == typeof(long?));

                var isDateTime = (p.PropertyType == typeof(DateTime) || p.PropertyType == typeof(DateTime?));

                var isGuid = (p.PropertyType == typeof(Guid) || p.PropertyType == typeof(Guid?));

                if (isLong && isNotNull)
                {
                    var          space  = i == 0 ? "" : "            ";
                    const string space2 = "            ";
                    sb.AppendLine(space + $"if (eentity123Model.{p.Name} == 0)");
                    sb.AppendLine(space2 + $"{{");
                    sb.AppendLine(space2 + $"    result.Add(new ReturnErrorItem(\"{p.Name}\", \"{p.Name} cannot be empty\"));");
                    sb.AppendLine(space2 + $"}}");

                    if (p.Name.EndsWith("TypeId"))
                    {
                        var fKeyType = GetFkeyType(t.Name, p);
                        if (fKeyType != null && CodeGenUtils.IsEnumAvailable(fKeyType.Name + "s"))
                        {
                            sb.AppendLine(space2 + $"else if (!ValidationUtils.IsEnumValid<{fKeyType.Name}s,long>(eentity123Model.{p.Name}))");
                            sb.AppendLine(space2 + $"{{");
                            sb.AppendLine(space2 + $"    result.Add(new ReturnErrorItem(\"{p.Name}\", \"{p.Name} is not a valid {fKeyType.Name}\"));");
                            sb.AppendLine(space2 + $"}}");
                        }
                    }

                    i++;
                }
                else if (isString)
                {
                    var          space  = i == 0 ? "" : "            ";
                    const string space2 = "            ";
                    sb.AppendLine(space + $"if (eentity123Model.{p.Name} != null && eentity123Model.{p.Name}.Length > EEntity123Model.COLUMN_SIZE_{p.Name})");
                    sb.AppendLine(space2 + $"{{");
                    sb.AppendLine(space2 + $"    result.Add(new ReturnErrorItem(\"{p.Name}\", $\"{p.Name} size should not exceed {{EEntity123Model.COLUMN_SIZE_{p.Name}}}\"));");
                    sb.AppendLine(space2 + $"}}");

                    if (isNotNull)
                    {
                        sb.AppendLine(space2 + $"if (eentity123Model.{p.Name} == null)");
                        sb.AppendLine(space2 + $"{{");
                        sb.AppendLine(space2 + $"    result.Add(new ReturnErrorItem(\"{p.Name}\", \"{p.Name} is reqired \"));");
                        sb.AppendLine(space2 + $"}}");
                    }
                    i++;
                }
                else if (isDateTime)
                {
                    var          space  = i == 0 ? "" : "            ";
                    const string space2 = "            ";
                    if (!isNotNull)
                    {
                        sb.AppendLine(space + $"if (eentity123Model.{p.Name} != null && !DateUtils.IsValidDate(eentity123Model.{p.Name}.Value))");
                        sb.AppendLine(space2 + $"{{");
                        sb.AppendLine(space2 + $"    result.Add(new ReturnErrorItem(\"{p.Name}\", $\"{p.Name} is not a validate datetime\"));");
                        sb.AppendLine(space2 + $"}}");
                    }
                    else
                    {
                        sb.AppendLine(space + $"if (!DateUtils.IsValidDate(eentity123Model.{p.Name}))");
                        sb.AppendLine(space2 + $"{{");
                        sb.AppendLine(space2 + $"    result.Add(new ReturnErrorItem(\"{p.Name}\", $\"{p.Name} is not a validate datetime\"));");
                        sb.AppendLine(space2 + $"}}");
                    }
                    i++;
                }
                else if (isGuid)
                {
                    var          space  = i == 0 ? "" : "            ";
                    const string space2 = "            ";
                    if (!isNotNull)
                    {
                        sb.AppendLine(space + $"if (eentity123Model.{p.Name} != null && Guid.Empty  == eentity123Model.{p.Name}.Value)");
                        sb.AppendLine(space2 + $"{{");
                        sb.AppendLine(space2 + $"    result.Add(new ReturnErrorItem(\"{p.Name}\", $\"{p.Name} is not a validate guid\"));");
                        sb.AppendLine(space2 + $"}}");
                    }
                    else
                    {
                        sb.AppendLine(space + $"if (Guid.Empty  == eentity123Model.{p.Name})");
                        sb.AppendLine(space2 + $"{{");
                        sb.AppendLine(space2 + $"    result.Add(new ReturnErrorItem(\"{p.Name}\", $\"{p.Name} is not a validate guid\"));");
                        sb.AppendLine(space2 + $"}}");
                    }
                    i++;
                }
            }
            return(sb.ToString());
        }
Example #2
0
        public static void MainApp()
        {
            var isTS = true;
            var sb   = new StringBuilder();

            var t = typeof(AccountController);

            var assembly = t.Assembly;

            if (assembly == null)
            {
                Console.WriteLine("Unabel to find the Op.Common assembly");
                return;
            }

            var combined = CodeGenUtils.GetParsedStructure(assembly);

            //Process all the Models to make sure they are not missed when generating the TS Models
            CodeGenUtils.AddDependentModels(ref combined);


            sb.AppendLine(System.Text.Json.JsonSerializer.Serialize <CombinedClass>(combined, new System.Text.Json.JsonSerializerOptions {
                WriteIndented = true
            }));
            CodeGenUtils.CleanAndWriteAndOpenFile(Directory.GetCurrentDirectory() + "\\TS_Code_Structure.json", sb);



            sb = new StringBuilder();
            foreach (var cInfo in combined.TypescriptModelClassInfoList)
            {
                if (cInfo.CanIgnore)
                {
                    continue;
                }

                sb.AppendLine($"export class {cInfo.Name} {{");
                foreach (var prop in cInfo.ModelType.GetProperties())
                {
                    sb.AppendLine($"    {CodeGenUtils.LowerFirstCharacter(prop.Name)} : {CodeGenUtils.GetModelProperty(isTS, prop.PropertyType)} = {CodeGenUtils.GetModelPropertyDefaultValue(isTS, prop.PropertyType)};");
                }

                sb.AppendLine($"}}");
                sb.AppendLine($"");
            }

            CodeGenUtils.CleanAndWriteAndOpenFile(GetReactModelDirectory() + "\\app-model.ts", sb);

            sb = new StringBuilder();
            sb.AppendLine($"import FrameworkHttpClientService from \"app/core/http/FrameworkHttpClientService\";");
            sb.AppendLine($"import {{ ReturnModel }} from \"app/models/return.model\";");
            sb.AppendLine($"import {{ ReturnListModel }} from \"app/models/return-list.model\";");
            sb.AppendLine($"import * as models from \"./app-model\";");
            sb.AppendLine($"");

            sb.AppendLine($"export default {{ ");
            foreach (var funcInfo in combined.FunctionInfoList)
            {
                foreach (var method in funcInfo.Methods)
                {
                    if (method.CanIgnore)
                    {
                        continue;
                    }

                    var listSuffix = "";
                    if (method.GetOutputParameterTypeWithModuleNamePrefix(isTS).Contains("ReturnListModel"))
                    {
                        listSuffix = "List";
                    }

                    sb.AppendLine($"    async {CodeGenUtils.LowerFirstCharacter(method.MethodName)}({CodeGenUtils.GetTSFunctionParameter(isTS, method.InputParameters)}): {method.GetOutputParameterTypeWithModuleNamePrefix(isTS)} {{");
                    if (method.CallType == MethodCallType.Get)
                    {
                        if (method.InputParameters.Count == 0)
                        {
                            sb.AppendLine($"        return FrameworkHttpClientService.get{listSuffix}(`/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}`);");
                        }
                        else
                        {
                            var qry = CodeGenUtils.GetTSFunctionQueryParametersAsString(isTS, method.InputParameters);
                            if (method.InputParameters.Count == 1 && !CodeGenUtils.IsAllAppParamBasicDataType(method.InputParameters))
                            {
                                qry = method.InputParameters[0].Value;
                            }
                            sb.AppendLine($"        return FrameworkHttpClientService.get{listSuffix}WithModel(`/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}`,{qry});");
                        }
                    }
                    else if (method.CallType == MethodCallType.Post)
                    {
                        if (method.InputParameters.Count > 1)
                        {
                            if (!CodeGenUtils.IsAllAppParamBasicDataType(method.InputParameters))
                            {
                                throw new Exception("Post Not supported with multiple complex input parameter");
                            }
                        }

                        if (method.InputParameters.Count == 0)
                        {
                            sb.AppendLine($"        return FrameworkHttpClientService.post{listSuffix}(\'/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\');");
                        }
                        else
                        {
                            var qry = CodeGenUtils.GetTSFunctionQueryParametersAsString(isTS, method.InputParameters);

                            if (method.InputParameters.Count == 1 && !CodeGenUtils.IsAllAppParamBasicDataType(method.InputParameters))
                            {
                                qry = method.InputParameters[0].Value;
                            }
                            sb.AppendLine($"        return FrameworkHttpClientService.post{listSuffix}WithModel(\'/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\',{qry});");
                        }
                    }
                    else if (method.CallType == MethodCallType.Put)
                    {
                        if (method.InputParameters.Count > 1)
                        {
                            if (!CodeGenUtils.IsAllAppParamBasicDataType(method.InputParameters))
                            {
                                throw new Exception("Put Not supported with multiple complex input parameter");
                            }
                        }

                        if (method.InputParameters.Count == 0)
                        {
                            sb.AppendLine($"        return FrameworkHttpClientService.put{listSuffix}(\'/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\');");
                        }
                        else
                        {
                            var qry = CodeGenUtils.GetTSFunctionQueryParametersAsString(isTS, method.InputParameters);
                            if (method.InputParameters.Count == 1 && !CodeGenUtils.IsAllAppParamBasicDataType(method.InputParameters))
                            {
                                qry = method.InputParameters[0].Value;
                            }
                            sb.AppendLine($"        return FrameworkHttpClientService.put{listSuffix}WithModel(\'/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\',{qry});");
                        }
                    }
                    else if (method.CallType == MethodCallType.Delete)
                    {
                        if (method.InputParameters.Count > 1)
                        {
                            if (!CodeGenUtils.IsAllAppParamBasicDataType(method.InputParameters))
                            {
                                throw new Exception("Delete Not supported with multiple complex input parameter");
                            }
                        }

                        if (method.InputParameters.Count == 0)
                        {
                            sb.AppendLine($"        return FrameworkHttpClientService.delete{listSuffix}(\'/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\');");
                        }
                        else
                        {
                            var qry = CodeGenUtils.GetTSFunctionQueryParametersAsString(isTS, method.InputParameters);
                            if (method.InputParameters.Count == 1 && !CodeGenUtils.IsAllAppParamBasicDataType(method.InputParameters))
                            {
                                qry = method.InputParameters[0].Value;
                            }
                            sb.AppendLine($"        return FrameworkHttpClientService.delete{listSuffix}WithModel(\'/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\',{qry});");
                        }
                    }
                    else
                    {
                        throw new Exception($"{method.CallType} Not supported");
                    }

                    sb.AppendLine($"    }},");
                    sb.AppendLine($"");
                }
            }

            sb.AppendLine($"}}");
            CodeGenUtils.CleanAndWriteAndOpenFile(GetReactHttpApiDirectory() + "\\app-http-client.ts", sb);
        }
Example #3
0
        public static void MainApp(bool isTest = false)
        {
            var isTS = false;
            var sb   = new StringBuilder();

            var t = typeof(AccountController);

            var assembly = t.Assembly;

            if (assembly == null)
            {
                Console.WriteLine("Unabel to find the LogR.Common assembly");
                return;
            }

            var combined = CodeGenUtils.GetParsedStructure(assembly);

            //Process all the Models to make sure they are not missed when generating the TS Models
            CodeGenUtils.AddDependentModels(ref combined);


            sb.AppendLine(System.Text.Json.JsonSerializer.Serialize <CombinedClass>(combined, new System.Text.Json.JsonSerializerOptions {
                WriteIndented = true
            }));
            CodeGenUtils.CleanAndWriteAndOpenFile(Directory.GetCurrentDirectory() + "\\TS_Code_Structure.json", sb);


            sb = new StringBuilder();
            sb.AppendLine("using System;");
            sb.AppendLine("using System.Collections.Generic;");
            sb.AppendLine("using System.ComponentModel.DataAnnotations;");
            if (isTest)
            {
                sb.AppendLine("using System.Text.Json.Serialization;");
            }
            else
            {
                sb.AppendLine("using Newtonsoft.Json;");
            }
            sb.AppendLine("using Framework.Infrastructure.Attributes;");
            if (isTest)
            {
                sb.AppendLine("namespace LogR.Api.IntegrationTests");
            }
            else
            {
                sb.AppendLine($"namespace LogR.WordAddIn.Shared.Models");
            }
            sb.AppendLine("{");

            foreach (var cInfo in combined.TypescriptModelClassInfoList)
            {
                if (cInfo.CanIgnore)
                {
                    continue;
                }

                sb.AppendLine($"    public class {cInfo.Name}");
                sb.AppendLine($"    {{");

                foreach (var prop in cInfo.ModelType.GetProperties())
                {
                    var requiredStr = "";
                    var rlst        = prop.GetCustomAttributes(typeof(RequiredAttribute), true);
                    if (!(rlst == null || rlst.Length == 0))
                    {
                        requiredStr = "[Required]";
                    }
                    if (isTest)
                    {
                        sb.AppendLine($"        {requiredStr}[JsonPropertyName(\"{CodeGenUtils.LowerFirstCharacter(prop.Name)}\")]");
                    }
                    else
                    {
                        sb.AppendLine($"        {requiredStr}[JsonProperty(\"{CodeGenUtils.LowerFirstCharacter(prop.Name)}\")]");
                    }
                    sb.AppendLine($"        public {CodeGenUtils.GetModelProperty(isTS, prop.PropertyType)} {prop.Name} {{set; get;}} = {CodeGenUtils.GetModelPropertyDefaultValue(isTS, prop.PropertyType)};");
                }

                sb.AppendLine($"        // Property Names");
                foreach (var prop in cInfo.ModelType.GetProperties())
                {
                    sb.AppendLine($"        public const string {prop.Name + "__Name"} = \"{prop.Name}\";");
                }

                var sSb = new List <string>();
                foreach (var prop in cInfo.ModelType.GetProperties())
                {
                    var slst = prop.GetCustomAttributes(typeof(StringLengthAttribute), true);
                    if (slst == null || slst.Length == 0)
                    {
                        continue;
                    }
                    sSb.Add($"        public const int {prop.Name + "__Size"} = {((StringLengthAttribute)slst[0]).MaximumLength};");
                }

                if (sSb.Count > 0)
                {
                    sb.AppendLine($"        // String Column Sizes");
                    foreach (var item in sSb)
                    {
                        sb.AppendLine(item);
                    }
                }

                sb.AppendLine($"    }}");
                sb.AppendLine($"");
            }

            sb.AppendLine("}");

            if (isTest)
            {
                CodeGenUtils.CleanAndWriteAndOpenFile(GetTestModelDirectory() + "\\ApiModels.cs", sb);
            }
            else
            {
                CodeGenUtils.CleanAndWriteAndOpenFile(GetReactModelDirectory() + "\\ApiModels.cs", sb);
            }

            var isb = new StringBuilder();

            isb.AppendLine("using System;");
            isb.AppendLine("using Framework.Infrastructure.Models.Result;");
            isb.AppendLine("using Framework.Infrastructure.Utils;");

            if (isTest)
            {
                isb.Append("");
            }
            else
            {
                isb.AppendLine("using LogR.WordAddIn.Shared.Models;");
            }
            if (isTest)
            {
                isb.Append("");
            }
            else
            {
                isb.AppendLine("using LogR.WordAddIn.Shared.Services;");
            }
            isb.AppendLine();
            if (isTest)
            {
                isb.AppendLine("namespace LogR.Api.IntegrationTests");
            }
            else
            {
                isb.AppendLine($"namespace LogR.WordAddIn.Shared.Interfaces");
            }
            isb.AppendLine("{");
            isb.AppendLine($"    public interface IHttpService");
            isb.AppendLine($"    {{");

            sb = new StringBuilder();
            sb.AppendLine("using System;");
            if (isTest)
            {
                sb.AppendLine("using System.Net.Http;");
            }
            sb.AppendLine("using Framework.Infrastructure.Models.Result;");
            sb.AppendLine("using Framework.Infrastructure.Utils;");
            if (isTest)
            {
                sb.AppendLine("using Framework.TestUtilies;");
            }
            if (isTest)
            {
                sb.AppendLine("using LogR.Api.All;");
            }
            if (isTest)
            {
                sb.Append("");
            }
            else
            {
                sb.AppendLine("using LogR.WordAddIn.Shared.Interfaces;");
            }
            if (isTest)
            {
                sb.Append("");
            }
            else
            {
                sb.AppendLine("using LogR.WordAddIn.Shared.Models;");
            }
            if (isTest)
            {
                sb.Append("");
            }
            else
            {
                sb.AppendLine("using LogR.WordAddIn.Shared.Services;");
            }
            sb.AppendLine();
            if (isTest)
            {
                sb.AppendLine("namespace LogR.Api.IntegrationTests");
            }
            else
            {
                sb.AppendLine($"namespace LogR.WordAddIn.Shared.Services");
            }
            sb.AppendLine("{");

            if (isTest)
            {
                sb.AppendLine("    public class HttpService : IDisposable");
            }
            else
            {
                sb.AppendLine($"    public class HttpService : IHttpService");
            }
            sb.AppendLine($"    {{");
            if (isTest)
            {
                sb.AppendLine("        private readonly string site;");
            }
            else
            {
                sb.AppendLine($"        private readonly AppConfigService appConfigService;");
            }
            if (isTest)
            {
                sb.AppendLine("        private readonly FrameworkTestEnvironment<Startup> env;");
            }
            if (isTest)
            {
                sb.AppendLine("        private bool disposedValue;");
            }

            if (isTest)
            {
                sb.AppendLine("        public HttpService(string site, FrameworkTestEnvironment<Startup> env)");
            }
            else
            {
                sb.AppendLine($"        public HttpService(AppConfigService appConfigService)");
            }
            sb.AppendLine($"        {{");
            if (isTest)
            {
                sb.AppendLine("            this.site = site ?? \"\";");
            }
            else
            {
                sb.AppendLine($"            this.appConfigService = appConfigService;");
            }
            if (isTest)
            {
                sb.AppendLine("            this.env = env;");
            }
            sb.AppendLine($"        }}");
            sb.AppendLine("");
            if (isTest)
            {
                sb.AppendLine("        protected virtual void Dispose(bool disposing)");
            }
            if (isTest)
            {
                sb.AppendLine("        {");
            }
            if (isTest)
            {
                sb.AppendLine("            if (!disposedValue)");
            }
            if (isTest)
            {
                sb.AppendLine("            {");
            }
            if (isTest)
            {
                sb.AppendLine("                disposedValue = true;");
            }
            if (isTest)
            {
                sb.AppendLine("            }");
            }
            if (isTest)
            {
                sb.AppendLine("        }");
            }
            if (isTest)
            {
                sb.AppendLine("");
            }
            if (isTest)
            {
                sb.AppendLine("        public void Dispose()");
            }
            if (isTest)
            {
                sb.AppendLine("        {");
            }
            if (isTest)
            {
                sb.AppendLine("            Dispose(disposing: true);");
            }
            if (isTest)
            {
                sb.AppendLine("            GC.SuppressFinalize(this);");
            }
            if (isTest)
            {
                sb.AppendLine("        }");
            }
            sb.AppendLine($"         public string Url(string fragment)");
            sb.AppendLine($"         {{");
            if (isTest)
            {
                sb.AppendLine("             return RestClientUtils.Url(site, fragment);");
            }
            else
            {
                sb.AppendLine($"             return RestClientUtils.Url(appConfigService.Site, fragment);");
            }
            sb.AppendLine($"         }}");
            sb.AppendLine("");

            var tokenVar = "token: appConfigService.CurrentToken, headers : appConfigService.CurrentHeaders";

            if (isTest)
            {
                tokenVar = "appHeader = appHeader";
            }

            string lineValue;
            string iLineValue;

            foreach (var funcInfo in combined.FunctionInfoList)
            {
                foreach (var method in funcInfo.Methods)
                {
                    if (method.CanIgnore)
                    {
                        continue;
                    }
                    //var returnModel = "ReturnModel";
                    var listSuffix = "";
                    if (method.GetOutputParameterTypeWithModuleNamePrefix(isTS).Contains("ReturnListModel"))
                    {
                        listSuffix = "List";
                        //returnModel = "ReturnListModel";
                    }

                    var(modelName, outerClass) = CodeGenUtils.GetModelPrefixedClassNameInfo(isTS, method.OutputParameterType);
                    if (modelName == null)
                    {
                        modelName = "";
                    }

                    if (isTest)
                    {
                        lineValue = ($"        public virtual (HttpResponseMessage response, {method.GetOutputParameterTypeWithModuleNamePrefix(isTS)} result) {method.MethodName}({CodeGenUtils.GetTSFunctionParameter(isTS, method.InputParameters, isTest)})");
                    }
                    else
                    {
                        lineValue = ($"        public virtual {method.GetOutputParameterTypeWithModuleNamePrefix(isTS)} {method.MethodName}({CodeGenUtils.GetTSFunctionParameter(isTS, method.InputParameters, isTest)})");
                    }

                    sb.AppendLine(lineValue);
                    lineValue = ($"        {{");
                    sb.AppendLine(lineValue);

                    iLineValue = ($"        {method.GetOutputParameterTypeWithModuleNamePrefix(isTS)} {method.MethodName}({CodeGenUtils.GetTSFunctionParameter(isTS, method.InputParameters, isTest)});");
                    isb.AppendLine(iLineValue);

                    var space = "           ";
                    if (method.CallType == MethodCallType.Get)
                    {
                        if (method.InputParameters.Count == 0)
                        {
                            if (isTest)
                            {
                                lineValue = ($"{space}return env.GetAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>,Object>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),null,appHeader).Result;");
                            }
                            else
                            {
                                lineValue = ($"{space}return RestClientUtils.Get{listSuffix}<{modelName}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{tokenVar});");
                            }
                            sb.AppendLine(lineValue);
                        }
                        else
                        {
                            var inputParamType = assembly.GetType(method.InputParameters[0].TypeFullName);

                            if (inputParamType == null)
                            {
                                inputParamType = Type.GetType(method.InputParameters[0].TypeFullName);
                            }

                            if (method.InputParameters[0].Key == "Nullable`1")
                            {
                                if (method.InputParameters[0].Value == "123~!@#")
                                {
                                    continue;
                                }
                            }

                            var qry = CodeGenUtils.GetTSFunctionQueryParametersAsString(isTS, method.InputParameters);
                            if (method.InputParameters.Count == 1)
                            {
                                var p = method.InputParameters[0].Value;
                                var s = "";
                                var k = method.InputParameters[0].Key;
                                if (!CodeGenUtils.IsBasicType(method.InputParameters[0].Key))
                                {
                                    s = "";
                                }
                                else
                                {
                                    p = "new { " + p + " }";
                                    k = "Object";
                                }

                                if (isTest)
                                {
                                    lineValue = ($"{space}return env.GetAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>,{k}>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{p},appHeader).Result;");
                                }
                                else
                                {
                                    lineValue = ($"{space}return RestClientUtils.Get{listSuffix}<{modelName}{s}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{p},{tokenVar});");
                                }
                                sb.AppendLine(lineValue);
                            }
                            else
                            {
                                if (isTest)
                                {
                                    lineValue = ($"{space}return env.GetAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>,Object>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{qry},appHeader).Result;");
                                }
                                else
                                {
                                    lineValue = ($"{space}return RestClientUtils.Get{listSuffix}<{modelName}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{qry},{tokenVar});");
                                }
                                sb.AppendLine(lineValue);
                            }
                        }
                    }
                    else if (method.CallType == MethodCallType.Post)
                    {
                        if (method.InputParameters.Count > 1)
                        {
                            throw new Exception("Post Not supported with multiple input parameter");
                        }
                        if (method.InputParameters.Count == 0)
                        {
                            if (isTest)
                            {
                                lineValue = ($"{space}return env.PostAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>,Object>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),null,appHeader).Result;");
                            }
                            else
                            {
                                lineValue = ($"{space}return RestClientUtils.Post{listSuffix}<{modelName}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{tokenVar});");
                            }
                            sb.AppendLine(lineValue);
                        }
                        else
                        {
                            var p = method.InputParameters[0].Value;
                            var s = ",object";
                            var k = method.InputParameters[0].Key;

                            if (!CodeGenUtils.IsBasicType(method.InputParameters[0].Key))
                            {
                                s = "," + method.InputParameters[0].Key;
                            }
                            else
                            {
                                p = "new { " + p + " }";
                                k = "Object";
                            }
                            if (isTest)
                            {
                                lineValue = ($"{space}return env.PostAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>,{k}>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{p},appHeader).Result;");
                            }
                            else
                            {
                                lineValue = ($"{space}return RestClientUtils.Post{listSuffix}WithModel<{modelName}{s}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{p},{tokenVar});");
                            }
                            sb.AppendLine(lineValue);
                        }
                    }
                    else if (method.CallType == MethodCallType.Put)
                    {
                        if (method.InputParameters.Count > 1)
                        {
                            //CodeGenUtils.MethodParamsCount(method.InputParameters);
                            if (!CodeGenUtils.IsAllAppParamBasicDataType(method.InputParameters))
                            {
                                throw new Exception("Post Not supported with multiple complex input parameter");
                            }
                        }

                        if (method.InputParameters.Count == 0)
                        {
                            if (isTest)
                            {
                                lineValue = ($"{space}return env.PutAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>,Object>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),null,appHeader).Result;");
                            }
                            else
                            {
                                lineValue = ($"{space}return RestClientUtils.Put{listSuffix}<{modelName}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{tokenVar});");
                            }
                            sb.AppendLine(lineValue);
                        }
                        else
                        {
                            var p    = "";
                            var s    = "";
                            var k    = "";
                            var pLst = new List <string>();
                            foreach (var ip in method.InputParameters)
                            {
                                if (!CodeGenUtils.IsBasicType(ip.Key))
                                {
                                    k = ip.Key;
                                    p = ip.Value;
                                    s = "," + ip.Key;
                                }
                                else
                                {
                                    if (method.InputParameters.Count == 1)
                                    {
                                        p = "new { " + ip.Value + " }";
                                    }
                                    else
                                    {
                                        pLst.Add(ip.Value);
                                    }
                                    k = "Object";
                                    s = ",object";
                                }
                            }

                            if (method.InputParameters.Count > 1)
                            {
                                p = "new { " + String.Join(",", pLst) + " }";
                            }

                            if (isTest)
                            {
                                lineValue = ($"{space}return env.PutAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>,{k}>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{p},appHeader).Result;");
                            }
                            else
                            {
                                lineValue = ($"{space}return RestClientUtils.Put{listSuffix}WithModel<{modelName}{s}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{p},{tokenVar});");
                            }
                            sb.AppendLine(lineValue);
                        }
                    }
                    else if (method.CallType == MethodCallType.Delete)
                    {
                        if (method.InputParameters.Count > 1)
                        {
                            throw new Exception("Delte Not supported with multiple input parameter");
                        }
                        if (method.InputParameters.Count == 0)
                        {
                            if (isTest)
                            {
                                lineValue = ($"{space}return env.DeleteAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),appHeader).Result;");
                            }
                            else
                            {
                                lineValue = ($"{space}return RestClientUtils.Delete{listSuffix}<{modelName}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{tokenVar});");
                            }

                            sb.AppendLine(lineValue);
                        }
                        else
                        {
                            var p = method.InputParameters[0].Value;
                            var s = "";
                            if (!CodeGenUtils.IsBasicType(method.InputParameters[0].Key))
                            {
                                s = "," + method.InputParameters[0].Key;
                            }
                            else
                            {
                                p = "new { " + p + " }";
                            }

                            if (isTest)
                            {
                                lineValue = ($"{space}return env.DeleteAndReadAsJsonWithNewTokenClientAsync<Return{listSuffix}Model<{modelName}>>(token,Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{p},appHeader).Result;");
                            }
                            else
                            {
                                lineValue = ($"{space}return RestClientUtils.Delete{listSuffix}<{modelName}{s}>(Url(\"/api/v1/{funcInfo.ApiClassName.ToLower()}/{method.ApiMethodName.ToLower()}\"),{p},{tokenVar});");
                            }
                            sb.AppendLine(lineValue);
                        }
                    }
                    lineValue = ($"        }}");
                    sb.AppendLine(lineValue);

                    lineValue = ($"");
                    sb.AppendLine(lineValue);
                }
            }

            lineValue = ($"    }}");
            sb.AppendLine(lineValue);
            lineValue = ($"}}");
            sb.AppendLine(lineValue);

            iLineValue = ($"    }}");
            isb.AppendLine(iLineValue);
            iLineValue = ($"}}");
            isb.AppendLine(iLineValue);

            if (isTest)
            {
                CodeGenUtils.CleanAndWriteAndOpenFile(GetTestHttpApiDirectory() + "\\HttpService.cs", sb);
            }
            else
            {
                CodeGenUtils.CleanAndWriteAndOpenFile(GetReactHttpApiDirectory() + "\\HttpService.cs", sb);
                CodeGenUtils.CleanAndWriteAndOpenFile(GetReactInterfaceDirectory() + "\\IHttpService.cs", isb);
            }
        }
Example #4
0
        public static CombinedClass GetParsedStructure(Assembly assembly)
        {
            var combined = new CombinedClass();

            foreach (var aClass in assembly.GetTypes())
            {
                if (!typeof(Microsoft.AspNetCore.Mvc.Controller).IsAssignableFrom(aClass))
                {
                    continue;
                }

                var cItem = new TClass {
                    ClassName = aClass.Name
                };
                combined.FunctionInfoList.Add(cItem);

                var methodInfos = aClass.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public);

                if (methodInfos.Length == 0)
                {
                    continue;
                }

                foreach (var method in methodInfos)
                {
                    MethodCallType callType;

                    var methodParams = method.GetParameters();
                    var returnType   = method.ReturnType;

                    if (method.GetCustomAttribute(typeof(HttpPostAttribute)) != null)
                    {
                        if (!DoesMethodParamsOneOrNoBody(methodParams))
                        {
                            throw new NotImplementedException($"This Post scenario is not implemented for {aClass.Name} - {method.Name}");
                        }

                        callType = MethodCallType.Post;
                    }
                    else if (method.GetCustomAttribute(typeof(HttpGetAttribute)) != null)
                    {
                        callType = MethodCallType.Get;
                        if (DoesMethodParamsAnyBody(methodParams))
                        {
                            throw new NotImplementedException($"This get scenario is not implemented for {aClass.Name} - {method.Name}");
                        }
                    }
                    else if (method.GetCustomAttribute(typeof(HttpPutAttribute)) != null)
                    {
                        if (!DoesMethodParamsOneOrNoBody(methodParams))
                        {
                            throw new NotImplementedException($"This put scenario is not implemented for {aClass.Name} - {method.Name}");
                        }
                        callType = MethodCallType.Put;
                    }
                    else if (method.GetCustomAttribute(typeof(HttpDeleteAttribute)) != null)
                    {
                        if (DoesMethodParamsAnyBody(methodParams))
                        {
                            throw new NotImplementedException($"This delete scenario is not implemented for {aClass.Name} - {method.Name}");
                        }
                        callType = MethodCallType.Delete;
                    }
                    else
                    {
                        throw new NotImplementedException("This scenario is not implemented");
                    }

                    var rName = returnType.Name;
                    var underlysingReturnType = returnType;

                    if (returnType.BaseType == typeof(System.Threading.Tasks.Task))
                    {
                        (rName, underlysingReturnType) = CodeGenUtils.ProcessGenericVariable(combined, returnType);
                    }
                    else
                    {
                        if (returnType.IsGenericType)
                        {
                            (rName, underlysingReturnType) = CodeGenUtils.ProcessGenericVariable(combined, returnType);
                        }
                    }

                    var mItem = new TMethod {
                        MethodName = method.Name, CallType = callType, OutputParameterType = rName, CanIgnore = CodeGenUtils.CanIgnoreReturnType(underlysingReturnType)
                    };
                    cItem.Methods.Add(mItem);

                    //var inputParam = "";
                    foreach (var param in methodParams)
                    {
                        if (!combined.TypescriptModelClassInfoList.Any(x => x.Name == param.ParameterType.Name))
                        {
                            combined.TypescriptModelClassInfoList.Add(new TypescriptModelClass {
                                Name = param.ParameterType.Name, ModelType = param.ParameterType, CanIgnore = CanIgnoreReturnType(param.ParameterType)
                            });
                        }

                        mItem.InputParameters.Add(new InputParam {
                            Key = param.ParameterType.Name, Value = param.Name, TypeFullName = param.ParameterType.FullName, InputType = GetInputType(param)
                        });
                    }
                }
            }
            return(combined);
        }