doc.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package crud
  2. import (
  3. "git.nspix.com/golang/rest/orm/schema"
  4. "git.nspix.com/golang/rest/scenario"
  5. "strings"
  6. )
  7. func (crud *CRUD) generateParams(e *Entity, scenario string) string {
  8. var sb strings.Builder
  9. schemas := schema.VisibleField(e.Module, e.stmt.Table, scenario)
  10. sb.WriteString("| 参数名称 | 参数类型 | 参数说明 |")
  11. sb.WriteByte('\n')
  12. sb.WriteString("| -------- | ------- | -------- |")
  13. sb.WriteByte('\n')
  14. for _, sc := range schemas {
  15. sb.WriteByte('|')
  16. sb.WriteString(sc.Column)
  17. sb.WriteByte('|')
  18. sb.WriteString(sc.Type)
  19. sb.WriteByte('|')
  20. sb.WriteString(sc.Label)
  21. sb.WriteByte('|')
  22. sb.WriteByte('\n')
  23. }
  24. return sb.String()
  25. }
  26. func (crud *CRUD) generateArgs(schemas []*schema.Schema) string {
  27. var sb strings.Builder
  28. sb.WriteString("| 参数名称 | 参数类型 | 参数说明 |")
  29. sb.WriteByte('\n')
  30. sb.WriteString("| -------- | ------- | -------- |")
  31. sb.WriteByte('\n')
  32. for _, sc := range schemas {
  33. sb.WriteByte('|')
  34. sb.WriteString(sc.Column)
  35. sb.WriteByte('|')
  36. sb.WriteString(sc.Type)
  37. sb.WriteByte('|')
  38. sb.WriteString(sc.Label)
  39. sb.WriteByte('|')
  40. sb.WriteByte('\n')
  41. }
  42. return sb.String()
  43. }
  44. func (crud *CRUD) generateDoc(e *Entity) []byte {
  45. var sb strings.Builder
  46. sb.WriteString("")
  47. sb.WriteString("# " + e.naming.label + "接口")
  48. sb.WriteByte('\n')
  49. sb.WriteByte('\n')
  50. if e.hasScenarios(ScenarioList) {
  51. sb.WriteString("## 获取" + e.naming.label + "列表")
  52. sb.WriteByte('\n')
  53. sb.WriteString("> 接口用于搜索" + e.naming.label + "列表数据")
  54. sb.WriteByte('\n')
  55. sb.WriteByte('\n')
  56. sb.WriteString("**请求方法** ")
  57. sb.WriteString("GET")
  58. sb.WriteByte('\n')
  59. sb.WriteByte('\n')
  60. sb.WriteString("**请求地址** ")
  61. sb.WriteString(e.Urls[ScenarioList])
  62. sb.WriteByte('\n')
  63. sb.WriteString("### 请求参数")
  64. sb.WriteByte('\n')
  65. sb.WriteString(crud.generateParams(e, scenario.Search))
  66. sb.WriteByte('\n')
  67. sb.WriteString("### 返回参数")
  68. sb.WriteByte('\n')
  69. sb.WriteString(crud.generateArgs([]*schema.Schema{
  70. {Column: "errno", Type: "integer", Label: "错误代码,为0表示成功,否则是失败"},
  71. {Column: "errmsg", Type: "string", Label: "错误消息"},
  72. {Column: "result", Type: "array", Label: "返回" + e.naming.label + "对象数据"},
  73. }))
  74. sb.WriteByte('\n')
  75. sb.WriteString("---------\n")
  76. sb.WriteByte('\n')
  77. sb.WriteByte('\n')
  78. sb.WriteByte('\n')
  79. }
  80. if e.hasScenarios(ScenarioCreate) {
  81. sb.WriteString("## 创建" + e.naming.label)
  82. sb.WriteByte('\n')
  83. sb.WriteString("> 接口用于创建" + e.naming.label)
  84. sb.WriteByte('\n')
  85. sb.WriteByte('\n')
  86. sb.WriteString("**请求方法** ")
  87. sb.WriteString("POST")
  88. sb.WriteByte('\n')
  89. sb.WriteByte('\n')
  90. sb.WriteString("**请求地址** ")
  91. sb.WriteString(e.Urls[ScenarioCreate])
  92. sb.WriteByte('\n')
  93. sb.WriteString("### 请求参数")
  94. sb.WriteByte('\n')
  95. sb.WriteString(crud.generateParams(e, scenario.Create))
  96. sb.WriteByte('\n')
  97. sb.WriteString("### 返回数据")
  98. sb.WriteByte('\n')
  99. sb.WriteString(crud.generateArgs([]*schema.Schema{
  100. {Column: "errno", Type: "integer", Label: "错误代码,为0表示成功,否则是失败"},
  101. {Column: "errmsg", Type: "string", Label: "错误消息"},
  102. {Column: "result", Type: "object", Label: "成功返回创建的ID和状态信息"},
  103. }))
  104. sb.WriteByte('\n')
  105. sb.WriteString("---------\n")
  106. sb.WriteByte('\n')
  107. sb.WriteByte('\n')
  108. sb.WriteByte('\n')
  109. }
  110. if e.hasScenarios(ScenarioUpdate) {
  111. sb.WriteString("## 更新" + e.naming.label)
  112. sb.WriteByte('\n')
  113. sb.WriteString("> 接口用于更新" + e.naming.label)
  114. sb.WriteByte('\n')
  115. sb.WriteByte('\n')
  116. sb.WriteString("**请求方法** ")
  117. sb.WriteString("PUT")
  118. sb.WriteByte('\n')
  119. sb.WriteByte('\n')
  120. sb.WriteString("**请求地址** ")
  121. sb.WriteString(e.Urls[ScenarioUpdate])
  122. sb.WriteByte('\n')
  123. sb.WriteString("### 请求参数")
  124. sb.WriteByte('\n')
  125. sb.WriteString(crud.generateParams(e, scenario.Update))
  126. sb.WriteByte('\n')
  127. sb.WriteString("### 返回数据")
  128. sb.WriteByte('\n')
  129. sb.WriteString(crud.generateArgs([]*schema.Schema{
  130. {Column: "errno", Type: "integer", Label: "错误代码,为0表示成功,否则是失败"},
  131. {Column: "errmsg", Type: "string", Label: "错误消息"},
  132. {Column: "result", Type: "object", Label: "成功返回更新的ID和状态信息"},
  133. }))
  134. sb.WriteByte('\n')
  135. sb.WriteString("---------\n")
  136. sb.WriteByte('\n')
  137. sb.WriteByte('\n')
  138. sb.WriteByte('\n')
  139. }
  140. if e.hasScenarios(ScenarioDelete) {
  141. sb.WriteString("## 删除" + e.naming.label)
  142. sb.WriteByte('\n')
  143. sb.WriteString("> 接口用于删除" + e.naming.label)
  144. sb.WriteByte('\n')
  145. sb.WriteByte('\n')
  146. sb.WriteString("**请求方法** ")
  147. sb.WriteString("DELETE")
  148. sb.WriteByte('\n')
  149. sb.WriteByte('\n')
  150. sb.WriteString("**请求地址** ")
  151. sb.WriteString(e.Urls[ScenarioDelete])
  152. sb.WriteByte('\n')
  153. sb.WriteString("### 返回数据")
  154. sb.WriteByte('\n')
  155. sb.WriteString(crud.generateArgs([]*schema.Schema{
  156. {Column: "errno", Type: "integer", Label: "错误代码,为0表示成功,否则是失败"},
  157. {Column: "errmsg", Type: "string", Label: "错误消息"},
  158. {Column: "result", Type: "object", Label: "成功返回删除的ID和状态信息"},
  159. }))
  160. sb.WriteByte('\n')
  161. sb.WriteString("---------\n")
  162. }
  163. if e.hasScenarios(ScenarioView) {
  164. sb.WriteString("## 获取" + e.naming.label + "详情")
  165. sb.WriteByte('\n')
  166. sb.WriteString("> 接口用于获取" + e.naming.label + "详情")
  167. sb.WriteByte('\n')
  168. sb.WriteByte('\n')
  169. sb.WriteString("**请求方法** ")
  170. sb.WriteString("GET")
  171. sb.WriteByte('\n')
  172. sb.WriteByte('\n')
  173. sb.WriteString("**请求地址** ")
  174. sb.WriteString(e.Urls[ScenarioDelete])
  175. sb.WriteByte('\n')
  176. sb.WriteString("**请求参数** ")
  177. sb.WriteByte('\n')
  178. sb.WriteByte('\n')
  179. sb.WriteString(crud.generateArgs([]*schema.Schema{
  180. {Column: "format", Type: "string", Label: "是否格式化输出,如果值为true,会对数据进行格式化输出,否则输出原始数据"},
  181. }))
  182. sb.WriteByte('\n')
  183. sb.WriteString("### 返回数据")
  184. sb.WriteByte('\n')
  185. sb.WriteString(crud.generateParams(e, scenario.View))
  186. sb.WriteByte('\n')
  187. sb.WriteString("---------\n")
  188. }
  189. return []byte(sb.String())
  190. }