Exemplo n.º 1
0
        protected override async Task <ActivityExecutionResult> OnExecuteAsync(WorkflowExecutionContext context, CancellationToken cancellationToken)
        {
            var moduleInfo = context.GetVariable <ModuleInfo>("ModuleInfo");

            var appDir  = AppDomain.CurrentDomain.BaseDirectory;
            var tempDir = Path.Combine(appDir, context.GetVariable <string>("TemplateDirectory"), "Generate", "src", "views");

            if (!Directory.Exists(tempDir))
            {
                throw new DirectoryNotFoundException($"模板目录 {tempDir} 不存在。");
            }

            string targetDirectory = moduleInfo.Option.OutputFolder.IsNullOrWhiteSpace()
                ? Path.Combine(context.GetVariable <string>("ProjectDirectory"), "src", "views")
                : Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, moduleInfo.Option.OutputFolder));

            ModuleApiOperation postApi = context.GetVariable <ModuleApiOperation>("PostModuleApi");
            var apiSchema = postApi.Operation.RequestBody.Content.First().Value.Schema;

            var model = new GenerateModelModel
            {
                Name              = moduleInfo.Name,
                ModuleInfo        = moduleInfo,
                RequestBodySchema = apiSchema
            };

            var overwrite = context.GetVariable <bool>("Overwrite");

            await GenerateFiles(tempDir, targetDirectory, model, overwrite);

            return(Done());
        }
Exemplo n.º 2
0
        public static string GenerateApiFuncName(GenerateCommandOptionBasic options, ModuleApiOperation api)
        {
            /*
             * 通过约定生成api方法名。
             * 获取列表   get      {path}
             * 获取详情   get      {path}/{id}
             * 新增       post     {path}
             * 编辑:      put      {path}/{id}
             * 编辑:      put      {path}
             * 删除:      delete   {path}/{id}
             */

            string        funcName = null;
            List <string> @params  = new List <string>();

            if (api.Url.Equals(options.ModulePrefix, StringComparison.OrdinalIgnoreCase))
            {
                funcName = api.Method.Equals("get", StringComparison.OrdinalIgnoreCase) ? "getList" : api.Method.ToLower();
            }
            //else if (api.Url.Equals(options.ModulePrefix + "/{id}", StringComparison.OrdinalIgnoreCase))
            //{
            //    funcName = api.Method.ToLower();
            //    @params.Add("id");
            //}
            else
            {
                var path = api.Url.Substring(options.ModulePrefix.Length)
                           .Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)
                           .SelectMany(x => x.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries))
                           .SelectMany(x => x.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries))
                           .Select(x => x.ToPascalCase())
                           .ToList();

                if (path.Count == 0 || path.Count > 0 && !(path[0].StartsWith("get", StringComparison.OrdinalIgnoreCase) ||
                                                           path[0].StartsWith("delete", StringComparison.OrdinalIgnoreCase) ||
                                                           path[0].StartsWith("post", StringComparison.OrdinalIgnoreCase) ||
                                                           path[0].StartsWith("put", StringComparison.OrdinalIgnoreCase)))
                {
                    path.Insert(0, api.Method.ToLower());
                }

                funcName = $"{string.Join("", path.Where(x => !x.StartsWith("{")))}"
                           .ToCamelCase();

                @params = path.Where(x => x.StartsWith("{"))
                          .Select(x =>
                                  x.Replace("{", "")
                                  .Replace("}", "")
                                  .ToCamelCase())
                          .ToList();
            }

            TryAddParams(@params, api.Operation);

            return($"{funcName} = ({string.Join(", ", @params)})");
        }
Exemplo n.º 3
0
        public static string GenerateApiParams(ModuleApiOperation api)
        {
            var @params = "";

            if (api.Operation.Parameters.Any(x => x.In == ParameterLocation.Query))
            {
                @params = ",\r\n    params";
            }

            if (api.Operation.RequestBody != null)
            {
                @params += ",\r\n    data: body";
            }

            return(@params);
        }
Exemplo n.º 4
0
        protected override ActivityExecutionResult OnExecute(WorkflowExecutionContext context)
        {
            var modelInfo          = context.GetVariable <ModuleInfo>("ModuleInfo");
            ModuleApiOperation api = modelInfo.ModuleApis.FirstOrDefault(api =>
                                                                         api.Url.Equals(modelInfo.Option.ModulePrefix, StringComparison.OrdinalIgnoreCase) &&
                                                                         api.Method.Equals("get", StringComparison.OrdinalIgnoreCase));

            if (api == null)
            {
                Logger.LogError("找不到 GET LIST API");
                return(Fault("找不到 GET LIST API"));
            }

            Logger.LogInformation("GET LIST API:{api}", modelInfo.Option.ModulePrefix);

            context.SetVariable("GetListModuleApi", api);

            return(Done());
        }
Exemplo n.º 5
0
        protected override ActivityExecutionResult OnExecute(WorkflowExecutionContext context)
        {
            var modelInfo = context.GetVariable <ModuleInfo>("ModuleInfo");
            ModuleApiOperation postApi = modelInfo.ModuleApis.FirstOrDefault(api =>
                                                                             api.Url.Equals(modelInfo.Option.ModulePrefix, StringComparison.OrdinalIgnoreCase) &&
                                                                             api.Method.Equals("post", StringComparison.OrdinalIgnoreCase));

            if (postApi == null)
            {
                Logger.LogError("找不到 POST API");
                return(Fault("找不到 POST API"));
            }

            var apiSchema = postApi.Operation.RequestBody.Content.First().Value.Schema;

            Logger.LogInformation("POST API:{api}, Model:{model}", modelInfo.Option.ModulePrefix,
                                  apiSchema.Reference.Id);

            context.SetVariable("PostModuleApi", postApi);

            return(Done());
        }
Exemplo n.º 6
0
        private IDictionary <string, OpenApiSchema> GetListProperty(ModuleApiOperation listApi, ProjectInfo projectInfo)
        {
            if ((listApi.Operation.Responses.TryGetValue("200", out var statusCode200Response) &&
                 statusCode200Response.Content.TryGetValue("application/json", out var openApiMediaType)))
            {
                if (!projectInfo.ListPropertySchemaPath.IsNullOrWhiteSpace())
                {
                    var paths = projectInfo.ListPropertySchemaPath.Split(new [] { '.' },
                                                                         StringSplitOptions.RemoveEmptyEntries);

                    OpenApiSchema propertySchema = openApiMediaType.Schema;
                    foreach (var path in paths)
                    {
                        if (!propertySchema.Properties.TryGetValue(path, out propertySchema))
                        {
                            Logger.LogWarning("路径不匹配,{path}", projectInfo.ListPropertySchemaPath);
                            goto defVal;
                        }
                    }

                    if ("array".Equals(propertySchema.Type))
                    {
                        return(propertySchema.Items.Properties);
                    }

                    return(propertySchema.Properties);
                }

defVal:
                return(openApiMediaType.Schema.Properties);
            }

            Logger.LogError(
                "请确认接口的 Responses 中存在 HttpStatusCode 等于 200 的响应,并且该响应的 Media type 要包含 application/json,URL:{url}",
                listApi.Url);

            return(new Dictionary <string, OpenApiSchema>());
        }
Exemplo n.º 7
0
        protected override async Task <ActivityExecutionResult> OnExecuteAsync(WorkflowExecutionContext context, CancellationToken cancellationToken)
        {
            var modelInfo         = context.GetVariable <ModuleInfo>("ModuleInfo");
            var permissionControl = context.GetVariable <bool>("PermissionControl");

            var appDir  = AppDomain.CurrentDomain.BaseDirectory;
            var tempDir = Path.Combine(appDir, context.GetVariable <string>("TemplateDirectory"), "Generate", "src", "views");

            if (!Directory.Exists(tempDir))
            {
                throw new DirectoryNotFoundException($"模板目录 {tempDir} 不存在。");
            }

            string targetDirectory = modelInfo.Option.OutputFolder.IsNullOrWhiteSpace()
                ? Path.Combine(context.GetVariable <string>("ProjectDirectory"), "src", "views")
                : Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, modelInfo.Option.OutputFolder));

            ModuleApiOperation getListApi = context.GetVariable <ModuleApiOperation>("GetListModuleApi");

            var model = new GenerateListModel
            {
                Name       = modelInfo.Name,
                ModuleInfo = modelInfo,

                GenerateCreate    = true,
                GenerateEdit      = true,
                PermissionControl = permissionControl,
                QueryParams       = TemplateHelper.GetQueryParameters(modelInfo.ProjectInfo, getListApi.Operation),
                ListProperty      = GetListProperty(getListApi, modelInfo.ProjectInfo)
            };

            var overwrite = context.GetVariable <bool>("Overwrite");

            await GenerateFiles(tempDir, targetDirectory, model, overwrite);

            return(Done());
        }