public IActionResult GenerateAllTable([FromBody] object data) { Dictionary <string, string> resultCollectionDic = new Dictionary <string, string>(); var builder = new StringBuilder(""); var fileContentMarkdown = ""; var markdownHeader = @" # 資料庫說明文件 # 目錄 [TOC] # 修訂歷程 | Date | Author | Version | Change Reference | | ---------- | ------ | ------- | ------------------------ | | | | | | # 資料表設計 "; builder.AppendLine(markdownHeader); try { string webRootPath = _hostingEnvironment.WebRootPath; //From wwwroot string contentRootPath = _hostingEnvironment.ContentRootPath; //From Others var postData = JsonConvert.DeserializeObject <dynamic>(data.ToString()); var databaseJson = postData.database; bool enableMap = (bool)postData.enableMap; string dbName = databaseJson.DatabaseName; List <TableInfo> tableInfo = getAllTableFromDb(dbName); //Markdown var markdown = _genDefineDic.Where(m => m.Key == "Markdown").FirstOrDefault(); foreach (TableInfo table in tableInfo) { var tableName = table.TableName; List <ColumnInfo> columnInfos = getColumnsFromTable(dbName, tableName); var tableInfoForLiquid = new TableInfoForLiquid(table); var columnInfosForLiquid = columnInfos.Select(m => new ColumnInfoForLiquid(m)).ToList(); var otherInfoForLiquid = getOtherInfoForLiquid(tableInfoForLiquid, columnInfosForLiquid); fileContentMarkdown = new CustomGenerator(markdown.Value).Generate(tableInfoForLiquid, columnInfosForLiquid, otherInfoForLiquid, webRootPath); builder.AppendLine(fileContentMarkdown); } resultCollectionDic.Add(markdown.Key, builder.ToString()); } catch (Exception ex) { ex.ToString(); } return(Json(resultCollectionDic)); }
/// <summary> /// (TW)取得其它資訊內容 /// </summary> /// <param name="tableInfoForLiquid"></param> /// <param name="columnsForLiquid"></param> /// <returns></returns> private OtherInfoForLiquid getOtherInfoForLiquid(TableInfoForLiquid tableInfoForLiquid, List <ColumnInfoForLiquid> columnsForLiquid) { var result = new OtherInfoForLiquid(); var identityColumn = columnsForLiquid.FirstOrDefault();//暫以第一筆表示 if (identityColumn != null) { result.IndentityColumn = identityColumn.MapColumnName; result.IndentityModelType = identityColumn.ModelType; result.IndentityColumnDescription = identityColumn.ColumnDescription; } return(result); }
/// <summary> /// (TW)產生程式碼 /// (EN)generate Source code /// </summary> /// <param name="tableInfoForLiquid"></param> /// <param name="columnsForLiquid"></param> /// <param name="contentRootPath"></param> /// <returns></returns> public dynamic Generate(TableInfoForLiquid tableInfoForLiquid, List <ColumnInfoForLiquid> columnsForLiquid, OtherInfoForLiquid otherInfoForLiquid, string contentRootPath) { var result = ""; var liquidPath = contentRootPath + LiquidPath; //(TW)使用Liquid的框架產生程式碼,傳入參數:table , columns var templateContent = File.ReadAllText(liquidPath, Encoding.UTF8); Template template = Template.Parse(templateContent); result = template.Render(Hash.FromAnonymousObject( new { table = tableInfoForLiquid, columns = columnsForLiquid, other = otherInfoForLiquid })); return(result); }
public IActionResult GenerateCode([FromBody] object data) { Dictionary <string, string> resultCollectionDic = new Dictionary <string, string>(); try { string webRootPath = _hostingEnvironment.WebRootPath; //From wwwroot string contentRootPath = _hostingEnvironment.ContentRootPath; //From Others var postData = JsonConvert.DeserializeObject <dynamic>(data.ToString()); var tableJson = postData.table; var columnsJson = postData.columns; //(TW)取得Table資訊 var tableInfo = JsonConvert.DeserializeObject <TableInfo>(tableJson.ToString()); //(TW)頁面上勾選的Table Columns資訊反序列化 (包括從DB取得的資訊內容) List <ColumnInfo> columnInfos = JsonConvert.DeserializeObject <List <ColumnInfo> >(columnsJson.ToString()); var tableInfoForLiquid = new TableInfoForLiquid(tableInfo); var columnInfosForLiquid = columnInfos.Select(m => new ColumnInfoForLiquid(m)).ToList(); var otherInfoForLiquid = getOtherInfoForLiquid(tableInfoForLiquid, columnInfosForLiquid); foreach (var item in _genDefineDic) { var result = new CustomGenerator(item.Value).Generate(tableInfoForLiquid, columnInfosForLiquid, otherInfoForLiquid, webRootPath); resultCollectionDic.Add(item.Key, result); } } catch (Exception ex) { ex.ToString(); } return(Json(resultCollectionDic)); }