From 539d38bc20a998ff486ea2505ab58d455f095d2e Mon Sep 17 00:00:00 2001 From: Hz_ Date: Fri, 29 May 2026 20:04:10 +0800 Subject: [PATCH] fix: backfill missing api token beta values (#15405) ### What problem does this PR solve? This PR updates `SystemService.ListAPITokens` to lazily backfill missing `beta` values for API tokens, matching the Python behavior of `/api/v1/system/tokens`. ### Type of change - When an API token has an empty `beta`, generate a new one. - Persist the generated `beta` back to the `api_token` table. - Keep the handler/routing unchanged. - `GET /api/v1/system/tokens` now returns tokens with `beta` filled in for older records that were missing it. - This aligns Go behavior with the Python implementation. --- internal/service/api_token.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/internal/service/api_token.go b/internal/service/api_token.go index 667610ae1e..8f90d7d5f0 100644 --- a/internal/service/api_token.go +++ b/internal/service/api_token.go @@ -43,12 +43,26 @@ func (s *SystemService) ListAPITokens(tenantID string) ([]*TokenResponse, error) responses := make([]*TokenResponse, len(tokens)) for i, token := range tokens { + beta := token.Beta + if beta == nil || *beta == "" { + generatedBeta := utility.GenerateBetaAPIToken(utility.GenerateAPIToken()) + if err := dao.DB.Model(&entity.APIToken{}). + Where("tenant_id = ? AND token = ?", tenantID, token.Token). + Updates(map[string]interface{}{ + "beta": generatedBeta, + }).Error; err != nil { + return nil, err + } + beta = &generatedBeta + token.Beta = beta + } + responses[i] = &TokenResponse{ TenantID: token.TenantID, Token: token.Token, DialogID: token.DialogID, Source: token.Source, - Beta: token.Beta, + Beta: beta, CreateTime: token.CreateTime, UpdateTime: token.UpdateTime, }