qdy пре 3 недеља
родитељ
комит
7c1fca4d94
3 измењених фајлова са 90 додато и 15 уклоњено
  1. 33
    15
      sdk/configure/client.go
  2. 51
    0
      sdk/configure/test/example.go
  3. 6
    0
      sdk/configure/types.go

+ 33
- 15
sdk/configure/client.go Прегледај датотеку

78
 	endpoint := "/api/dic-table/list"
78
 	endpoint := "/api/dic-table/list"
79
 
79
 
80
 	var result ResponseWrapper[[]DicTableDB]
80
 	var result ResponseWrapper[[]DicTableDB]
81
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, query, &result); err != nil {
81
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, query, &result, false); err != nil {
82
 		return nil, err
82
 		return nil, err
83
 	}
83
 	}
84
 
84
 
98
 	endpoint := fmt.Sprintf("/api/dic-table/detail/%s", tableID)
98
 	endpoint := fmt.Sprintf("/api/dic-table/detail/%s", tableID)
99
 
99
 
100
 	var result ResponseWrapper[DicTableDetail]
100
 	var result ResponseWrapper[DicTableDetail]
101
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, nil, &result); err != nil {
101
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, nil, &result, false); err != nil {
102
 		return nil, err
102
 		return nil, err
103
 	}
103
 	}
104
 
104
 
127
 	endpoint := "/api/dic-table/save"
127
 	endpoint := "/api/dic-table/save"
128
 
128
 
129
 	var result ResponseWrapper[DicTableDetail]
129
 	var result ResponseWrapper[DicTableDetail]
130
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result); err != nil {
130
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result, false); err != nil {
131
 		return nil, err
131
 		return nil, err
132
 	}
132
 	}
133
 
133
 
143
 	endpoint := fmt.Sprintf("/api/dic-table/delete/%s", tableID)
143
 	endpoint := fmt.Sprintf("/api/dic-table/delete/%s", tableID)
144
 
144
 
145
 	var result ResponseWrapper[int64]
145
 	var result ResponseWrapper[int64]
146
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, nil, &result); err != nil {
146
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, nil, &result, false); err != nil {
147
 		return err
147
 		return err
148
 	}
148
 	}
149
 
149
 
159
 	endpoint := "/api/dic-table/batch-save"
159
 	endpoint := "/api/dic-table/batch-save"
160
 
160
 
161
 	var result ResponseWrapper[bool]
161
 	var result ResponseWrapper[bool]
162
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result); err != nil {
162
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result, false); err != nil {
163
 		return err
163
 		return err
164
 	}
164
 	}
165
 
165
 
175
 	endpoint := "/api/dic-table/batch-sync"
175
 	endpoint := "/api/dic-table/batch-sync"
176
 
176
 
177
 	var result ResponseWrapper[BatchTableSyncResponse]
177
 	var result ResponseWrapper[BatchTableSyncResponse]
178
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result); err != nil {
178
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result, false); err != nil {
179
 		return nil, err
179
 		return nil, err
180
 	}
180
 	}
181
 
181
 
191
 	endpoint := "/api/alias/batch-sync"
191
 	endpoint := "/api/alias/batch-sync"
192
 
192
 
193
 	var result ResponseWrapper[BatchAliasSyncResponse]
193
 	var result ResponseWrapper[BatchAliasSyncResponse]
194
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result); err != nil {
194
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result, false); err != nil {
195
 		return nil, err
195
 		return nil, err
196
 	}
196
 	}
197
 
197
 
207
 	endpoint := "/api/dic-table-alias/save"
207
 	endpoint := "/api/dic-table-alias/save"
208
 
208
 
209
 	var result ResponseWrapper[TableAliasResponse]
209
 	var result ResponseWrapper[TableAliasResponse]
210
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result); err != nil {
210
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result, false); err != nil {
211
 		return nil, err
211
 		return nil, err
212
 	}
212
 	}
213
 
213
 
223
 	endpoint := "/api/dic-table-field-alias/save"
223
 	endpoint := "/api/dic-table-field-alias/save"
224
 
224
 
225
 	var result ResponseWrapper[TableFieldAliasResponse]
225
 	var result ResponseWrapper[TableFieldAliasResponse]
226
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result); err != nil {
226
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result, false); err != nil {
227
 		return nil, err
227
 		return nil, err
228
 	}
228
 	}
229
 
229
 
239
 	endpoint := "/api/dic-table-alias/list"
239
 	endpoint := "/api/dic-table-alias/list"
240
 
240
 
241
 	var result ResponseWrapper[[]TableAliasResponse]
241
 	var result ResponseWrapper[[]TableAliasResponse]
242
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, query, &result); err != nil {
242
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, query, &result, false); err != nil {
243
 		return nil, err
243
 		return nil, err
244
 	}
244
 	}
245
 
245
 
259
 	endpoint := "/api/dic-table-field-alias/list"
259
 	endpoint := "/api/dic-table-field-alias/list"
260
 
260
 
261
 	var result ResponseWrapper[[]TableFieldAliasResponse]
261
 	var result ResponseWrapper[[]TableFieldAliasResponse]
262
-	if err := c.doRequest(ctx, http.MethodPost, endpoint, query, &result); err != nil {
262
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, query, &result, false); err != nil {
263
 		return nil, err
263
 		return nil, err
264
 	}
264
 	}
265
 
265
 
275
 }
275
 }
276
 
276
 
277
 // doRequest 执行HTTP请求
277
 // doRequest 执行HTTP请求
278
-func (c *Client) doRequest(ctx context.Context, method, endpoint string, body interface{}, result interface{}) error {
278
+func (c *Client) doRequest(ctx context.Context, method, endpoint string, body interface{}, result interface{}, skipAuth bool) error {
279
 	// 构建URL
279
 	// 构建URL
280
 	url := c.config.BaseURL + endpoint
280
 	url := c.config.BaseURL + endpoint
281
 
281
 
295
 		return WrapError("do_request", "failed to create request", err)
295
 		return WrapError("do_request", "failed to create request", err)
296
 	}
296
 	}
297
 
297
 
298
-	// 设置认证头
299
-	if err := c.setAuthHeader(req); err != nil {
300
-		return err
298
+	// 设置认证头(可选)
299
+	if !skipAuth {
300
+		if err := c.setAuthHeader(req); err != nil {
301
+			return err
302
+		}
301
 	}
303
 	}
302
 
304
 
303
 	// 设置内容类型
305
 	// 设置内容类型
360
 	return nil
362
 	return nil
361
 }
363
 }
362
 
364
 
365
+// LoginUser 用户登录(无需认证)
366
+func (c *Client) LoginUser(ctx context.Context, req *UserLoginRequest) (string, error) {
367
+	endpoint := "/api/login/user"
368
+
369
+	var result ResponseWrapper[string]
370
+	if err := c.doRequest(ctx, http.MethodPost, endpoint, req, &result, true); err != nil {
371
+		return "", err
372
+	}
373
+
374
+	if !result.Success {
375
+		return "", NewClientError("login_user", fmt.Sprintf("API error: %s", result.Error), nil)
376
+	}
377
+
378
+	return result.Data, nil
379
+}
380
+
363
 // GetConfig 获取客户端配置
381
 // GetConfig 获取客户端配置
364
 func (c *Client) GetConfig() ClientConfig {
382
 func (c *Client) GetConfig() ClientConfig {
365
 	return c.config
383
 	return c.config

+ 51
- 0
sdk/configure/test/example.go Прегледај датотеку

33
 	// 示例6:批量保存表
33
 	// 示例6:批量保存表
34
 	exampleBatchSaveTables()
34
 	exampleBatchSaveTables()
35
 
35
 
36
+	// 示例7:用户登录
37
+	exampleLoginUser()
38
+
36
 }
39
 }
37
 
40
 
38
 func exampleCreateClient() {
41
 func exampleCreateClient() {
301
 	fmt.Println("  2. 表字典:存在则UPDATE,不存在则INSERT")
304
 	fmt.Println("  2. 表字典:存在则UPDATE,不存在则INSERT")
302
 	fmt.Println()
305
 	fmt.Println()
303
 }
306
 }
307
+
308
+func exampleLoginUser() {
309
+	fmt.Println("=== 示例7:用户登录 ===")
310
+
311
+	// 创建客户端(登录端点无需认证,但需要配置中心地址)
312
+	// 注意:登录端点本身不需要认证,但客户端需要BaseURL
313
+	client, err := configure.NewBasicAuthClient("http://localhost:8080", "admin", "123")
314
+	if err != nil {
315
+		log.Printf("Failed to create client: %v", err)
316
+		return
317
+	}
318
+
319
+	// 创建登录请求
320
+	req := &configure.UserLoginRequest{
321
+		UserID:   "testuser",
322
+		Password: "testpass",
323
+	}
324
+
325
+	// 执行登录
326
+	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
327
+	defer cancel()
328
+
329
+	fmt.Println("尝试用户登录...")
330
+	startTime := time.Now()
331
+
332
+	token, err := client.LoginUser(ctx, req)
333
+	if err != nil {
334
+		log.Printf("登录失败: %v", err)
335
+		return
336
+	}
337
+
338
+	elapsed := time.Since(startTime)
339
+	fmt.Printf("登录成功!耗时: %v\n", elapsed)
340
+	fmt.Printf("获取的Token: %s\n", token)
341
+	fmt.Println()
342
+
343
+	// 使用获取的token创建新的认证客户端
344
+	fmt.Println("使用获取的Token创建新的认证客户端...")
345
+	tokenClient, err := configure.NewTokenAuthClient("http://localhost:8080", token)
346
+	if err != nil {
347
+		log.Printf("Failed to create token client: %v", err)
348
+		return
349
+	}
350
+
351
+	fmt.Printf("Token客户端创建成功,BaseURL: %s\n", tokenClient.GetConfig().BaseURL)
352
+	fmt.Println("注意:实际使用时需要有效的用户凭证和正确的配置中心地址")
353
+	fmt.Println()
354
+}

+ 6
- 0
sdk/configure/types.go Прегледај датотеку

30
 	Description string `json:"description"`                  // 字段描述
30
 	Description string `json:"description"`                  // 字段描述
31
 }
31
 }
32
 
32
 
33
+// UserLoginRequest 用户登录请求
34
+type UserLoginRequest struct {
35
+	UserID   string `json:"user_id" binding:"required"`
36
+	Password string `json:"password" binding:"required"`
37
+}
38
+
33
 // DicTableDetail 数据库表字典详情(主表+子表)
39
 // DicTableDetail 数据库表字典详情(主表+子表)
34
 type DicTableDetail struct {
40
 type DicTableDetail struct {
35
 	// 主表信息
41
 	// 主表信息

Loading…
Откажи
Сачувај