Нема описа
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. // Package configure 使用示例
  2. //
  3. // 以下示例演示如何使用配置中心客户端SDK
  4. package test
  5. import (
  6. "context"
  7. "fmt"
  8. "log"
  9. "time"
  10. "git.x2erp.com/qdy/go-base/model/request/queryreq"
  11. "git.x2erp.com/qdy/go-base/sdk/configure"
  12. )
  13. // ExampleUsage 演示SDK的基本用法
  14. func ExampleUsage() {
  15. // 示例1:创建客户端
  16. exampleCreateClient()
  17. // 示例2:查询列表
  18. exampleListTables()
  19. // 示例3:创建表
  20. exampleSaveTable()
  21. // 示例4:查询详情
  22. exampleGetTable()
  23. // 示例5:删除表
  24. exampleDeleteTable()
  25. // 示例6:批量保存表
  26. exampleBatchSaveTables()
  27. // 示例7:用户登录
  28. exampleLoginUser()
  29. }
  30. func exampleCreateClient() {
  31. fmt.Println("=== 示例1:创建客户端 ===")
  32. // 方法1:使用默认配置
  33. client1, err := configure.NewClient()
  34. if err != nil {
  35. log.Printf("Failed to create default client: %v", err)
  36. } else {
  37. fmt.Printf("Default client created: URL=%s\n", client1.GetConfig().BaseURL)
  38. }
  39. // 方法2:使用Basic认证
  40. if _, err := configure.NewBasicAuthClient("http://localhost:8080", "admin", "123"); err != nil {
  41. log.Printf("Failed to create basic auth client: %v", err)
  42. } else {
  43. fmt.Println("Basic auth client created")
  44. }
  45. // 方法3:使用Token认证
  46. if _, err := configure.NewTokenAuthClient("http://localhost:8080", "your-token-here"); err != nil {
  47. log.Printf("Failed to create token auth client: %v", err)
  48. } else {
  49. fmt.Println("Token auth client created")
  50. }
  51. fmt.Println()
  52. }
  53. func exampleListTables() {
  54. fmt.Println("=== 示例2:查询数据库表字典列表 ===")
  55. // 创建客户端
  56. client, err := configure.NewBasicAuthClient("http://localhost:8080", "admin", "123")
  57. if err != nil {
  58. log.Printf("Failed to create client: %v", err)
  59. return
  60. }
  61. // 创建查询请求
  62. query := &configure.DicTableQueryRequest{
  63. QueryRequest: queryreq.QueryRequest{
  64. Page: 0,
  65. PageSize: 10,
  66. },
  67. }
  68. // 执行查询
  69. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  70. defer cancel()
  71. result, err := client.ListTables(ctx, query)
  72. if err != nil {
  73. log.Printf("Error listing tables: %v", err)
  74. return
  75. }
  76. fmt.Printf("Total tables: %d\n", result.TotalCount)
  77. fmt.Printf("Last page: %d\n", result.LastPage)
  78. fmt.Println()
  79. }
  80. func exampleSaveTable() {
  81. fmt.Println("=== 示例3:创建数据库表字典 ===")
  82. // 创建客户端
  83. client, err := configure.NewBasicAuthClient("http://localhost:8080", "admin", "123")
  84. if err != nil {
  85. log.Printf("Failed to create client: %v", err)
  86. return
  87. }
  88. // 创建请求
  89. req := &configure.DicTableRequest{
  90. TableID: "example_table_001",
  91. TableType: "实体表",
  92. Name: "示例表001",
  93. Description: "这是一个示例表",
  94. Fields: []configure.DicTableFieldRequest{
  95. {
  96. FieldID: "example_table_001.id",
  97. TableID: "example_table_001",
  98. FiledType: "实际字段",
  99. DataType: "数值型",
  100. FieldName: "id",
  101. FieldNameCN: "主键ID",
  102. Description: "主键字段",
  103. },
  104. {
  105. FieldID: "example_table_001.name",
  106. TableID: "example_table_001",
  107. FiledType: "实际字段",
  108. DataType: "字符型",
  109. FieldName: "name",
  110. FieldNameCN: "名称",
  111. Description: "名称字段",
  112. },
  113. },
  114. }
  115. // 执行保存
  116. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  117. defer cancel()
  118. detail, err := client.SaveTable(ctx, req)
  119. if err != nil {
  120. log.Printf("Error saving table: %v", err)
  121. return
  122. }
  123. fmt.Printf("Table saved successfully: %s\n", detail.Table.TableID)
  124. fmt.Printf("Table name: %s\n", detail.Table.Name)
  125. fmt.Printf("Number of fields: %d\n", len(detail.Fields))
  126. fmt.Println()
  127. }
  128. func exampleGetTable() {
  129. fmt.Println("=== 示例4:查询数据库表字典详情 ===")
  130. // 创建客户端
  131. client, err := configure.NewBasicAuthClient("http://localhost:8080", "admin", "123")
  132. if err != nil {
  133. log.Printf("Failed to create client: %v", err)
  134. return
  135. }
  136. // 查询表详情
  137. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  138. defer cancel()
  139. tableID := "example_table_001"
  140. detail, err := client.GetTable(ctx, tableID)
  141. if err != nil {
  142. if err == configure.ErrNotFound {
  143. fmt.Printf("Table %s not found\n", tableID)
  144. } else {
  145. log.Printf("Error getting table: %v", err)
  146. }
  147. return
  148. }
  149. fmt.Printf("Table ID: %s\n", detail.Table.TableID)
  150. fmt.Printf("Table Type: %s\n", detail.Table.TableType)
  151. fmt.Printf("Name: %s\n", detail.Table.Name)
  152. fmt.Printf("Description: %s\n", detail.Table.Description)
  153. fmt.Printf("Creator: %s\n", detail.Table.Creator)
  154. fmt.Printf("Fields count: %d\n", len(detail.Fields))
  155. fmt.Println()
  156. }
  157. func exampleDeleteTable() {
  158. fmt.Println("=== 示例5:删除数据库表字典 ===")
  159. // 创建客户端
  160. client, err := configure.NewBasicAuthClient("http://localhost:8080", "admin", "123")
  161. if err != nil {
  162. log.Printf("Failed to create client: %v", err)
  163. return
  164. }
  165. // 删除表
  166. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  167. defer cancel()
  168. tableID := "example_table_001"
  169. if err := client.DeleteTable(ctx, tableID); err != nil {
  170. if err == configure.ErrNotFound {
  171. fmt.Printf("Table %s not found\n", tableID)
  172. } else {
  173. log.Printf("Error deleting table: %v", err)
  174. }
  175. return
  176. }
  177. fmt.Printf("Table %s deleted successfully\n", tableID)
  178. fmt.Println()
  179. }
  180. func exampleBatchSaveTables() {
  181. fmt.Println("=== 示例6:批量保存数据库表字典 ===")
  182. // 创建客户端(使用Token认证)
  183. // 注意:实际使用时需要从认证服务获取有效的token
  184. client, err := configure.NewTokenAuthClient("http://localhost:8080", "your-valid-token-here")
  185. if err != nil {
  186. log.Printf("Failed to create client: %v", err)
  187. return
  188. }
  189. // 创建批量保存请求
  190. req := &configure.BatchSaveDicTablesRequest{
  191. Tables: []configure.DicTableRequest{
  192. {
  193. TableID: "batch_table_001",
  194. TableType: "实体表",
  195. Name: "批量测试表001",
  196. Description: "批量测试表001描述",
  197. },
  198. {
  199. TableID: "batch_table_002",
  200. TableType: "视图",
  201. Name: "批量测试表002",
  202. Description: "批量测试表002描述",
  203. },
  204. },
  205. Fields: []configure.DicTableFieldRequest{
  206. // 表1的字段
  207. {
  208. FieldID: "batch_table_001.id",
  209. TableID: "batch_table_001",
  210. FiledType: "实际字段",
  211. DataType: "数值型",
  212. FieldName: "id",
  213. FieldNameCN: "主键ID",
  214. Description: "表1主键字段",
  215. },
  216. {
  217. FieldID: "batch_table_001.name",
  218. TableID: "batch_table_001",
  219. FiledType: "实际字段",
  220. DataType: "字符型",
  221. FieldName: "name",
  222. FieldNameCN: "名称",
  223. Description: "表1名称字段",
  224. },
  225. // 表2的字段
  226. {
  227. FieldID: "batch_table_002.code",
  228. TableID: "batch_table_002",
  229. FiledType: "实际字段",
  230. DataType: "字符型",
  231. FieldName: "code",
  232. FieldNameCN: "编码",
  233. Description: "表2编码字段",
  234. },
  235. {
  236. FieldID: "batch_table_002.value",
  237. TableID: "batch_table_002",
  238. FiledType: "计算字段",
  239. DataType: "数值型",
  240. FieldName: "value",
  241. FieldNameCN: "数值",
  242. Description: "表2数值字段",
  243. },
  244. },
  245. }
  246. // 执行批量保存
  247. ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
  248. defer cancel()
  249. fmt.Println("开始批量保存2个表,4个字段...")
  250. startTime := time.Now()
  251. if err := client.BatchSaveTables(ctx, req); err != nil {
  252. log.Printf("批量保存失败: %v", err)
  253. return
  254. }
  255. elapsed := time.Since(startTime)
  256. fmt.Printf("批量保存成功!耗时: %v\n", elapsed)
  257. fmt.Println("注意:示例中的token需要替换为实际有效的token")
  258. fmt.Println("批量保存逻辑包括:")
  259. fmt.Println(" 1. 字段字典:先删除表的所有字段,再批量插入")
  260. fmt.Println(" 2. 表字典:存在则UPDATE,不存在则INSERT")
  261. fmt.Println()
  262. }
  263. func exampleLoginUser() {
  264. fmt.Println("=== 示例7:用户登录 ===")
  265. // 创建客户端(登录端点无需认证,但需要配置中心地址)
  266. // 注意:登录端点本身不需要认证,但客户端需要BaseURL
  267. client, err := configure.NewBasicAuthClient("http://localhost:8080", "admin", "123")
  268. if err != nil {
  269. log.Printf("Failed to create client: %v", err)
  270. return
  271. }
  272. // 创建登录请求
  273. req := &configure.UserLoginRequest{
  274. UserID: "testuser",
  275. Password: "testpass",
  276. }
  277. // 执行登录
  278. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  279. defer cancel()
  280. fmt.Println("尝试用户登录...")
  281. startTime := time.Now()
  282. token, err := client.LoginUser(ctx, req)
  283. if err != nil {
  284. log.Printf("登录失败: %v", err)
  285. return
  286. }
  287. elapsed := time.Since(startTime)
  288. fmt.Printf("登录成功!耗时: %v\n", elapsed)
  289. fmt.Printf("获取的Token: %s\n", token)
  290. fmt.Println()
  291. // 使用获取的token创建新的认证客户端
  292. fmt.Println("使用获取的Token创建新的认证客户端...")
  293. tokenClient, err := configure.NewTokenAuthClient("http://localhost:8080", token)
  294. if err != nil {
  295. log.Printf("Failed to create token client: %v", err)
  296. return
  297. }
  298. fmt.Printf("Token客户端创建成功,BaseURL: %s\n", tokenClient.GetConfig().BaseURL)
  299. fmt.Println("注意:实际使用时需要有效的用户凭证和正确的配置中心地址")
  300. fmt.Println()
  301. }