fix(lint): 修复 golangci-lint 检查错误

- 修复未检查的错误返回值 (errcheck)
- 移除未使用的 httpClient 字段 (unused)
- 修复低效赋值问题 (ineffassign)
- 使用 switch 替代 if-else 链 (staticcheck QF1003)
- 修复错误字符串首字母大写问题 (staticcheck ST1005)
- 运行 gofmt 格式化代码
This commit is contained in:
IanShaw027
2026-01-01 14:07:37 +08:00
parent 7df914af06
commit 34bbfb5dd2
3 changed files with 27 additions and 27 deletions

View File

@@ -1023,6 +1023,10 @@ func (h *AccountHandler) RefreshTier(c *gin.Context) {
} }
tierID, storageInfo, err := h.geminiOAuthService.FetchGoogleOneTier(c.Request.Context(), accessToken, proxyURL) tierID, storageInfo, err := h.geminiOAuthService.FetchGoogleOneTier(c.Request.Context(), accessToken, proxyURL)
if err != nil {
response.ErrorFrom(c, err)
return
}
if account.Extra == nil { if account.Extra == nil {
account.Extra = make(map[string]any) account.Extra = make(map[string]any)
@@ -1044,10 +1048,10 @@ func (h *AccountHandler) RefreshTier(c *gin.Context) {
} }
response.Success(c, gin.H{ response.Success(c, gin.H{
"tier_id": tierID, "tier_id": tierID,
"drive_storage_limit": account.Extra["drive_storage_limit"], "drive_storage_limit": account.Extra["drive_storage_limit"],
"drive_storage_usage": account.Extra["drive_storage_usage"], "drive_storage_usage": account.Extra["drive_storage_usage"],
"updated_at": account.Extra["drive_tier_updated_at"], "updated_at": account.Extra["drive_tier_updated_at"],
}) })
} }

View File

@@ -22,17 +22,11 @@ type DriveClient interface {
GetStorageQuota(ctx context.Context, accessToken, proxyURL string) (*DriveStorageInfo, error) GetStorageQuota(ctx context.Context, accessToken, proxyURL string) (*DriveStorageInfo, error)
} }
type driveClient struct { type driveClient struct{}
httpClient *http.Client
}
// NewDriveClient creates a new Drive API client // NewDriveClient creates a new Drive API client
func NewDriveClient() DriveClient { func NewDriveClient() DriveClient {
return &driveClient{ return &driveClient{}
httpClient: &http.Client{
Timeout: 10 * time.Second,
},
}
} }
// GetStorageQuota fetches storage quota from Google Drive API // GetStorageQuota fetches storage quota from Google Drive API
@@ -71,7 +65,7 @@ func (c *driveClient) GetStorageQuota(ctx context.Context, accessToken, proxyURL
// Rate limit - retry with exponential backoff // Rate limit - retry with exponential backoff
if resp.StatusCode == http.StatusTooManyRequests && attempt < maxRetries-1 { if resp.StatusCode == http.StatusTooManyRequests && attempt < maxRetries-1 {
resp.Body.Close() _ = resp.Body.Close()
backoff := time.Duration(1<<uint(attempt)) * time.Second // 1s, 2s, 4s backoff := time.Duration(1<<uint(attempt)) * time.Second // 1s, 2s, 4s
time.Sleep(backoff) time.Sleep(backoff)
continue continue
@@ -79,11 +73,11 @@ func (c *driveClient) GetStorageQuota(ctx context.Context, accessToken, proxyURL
// Other errors - return immediately // Other errors - return immediately
body, _ := io.ReadAll(resp.Body) body, _ := io.ReadAll(resp.Body)
resp.Body.Close() _ = resp.Body.Close()
return nil, fmt.Errorf("Drive API error (status %d): %s", resp.StatusCode, string(body)) return nil, fmt.Errorf("drive API error (status %d): %s", resp.StatusCode, string(body))
} }
defer resp.Body.Close() defer func() { _ = resp.Body.Close() }()
// Parse response // Parse response
var result struct { var result struct {
@@ -100,10 +94,10 @@ func (c *driveClient) GetStorageQuota(ctx context.Context, accessToken, proxyURL
// Parse limit and usage (handle both string and number formats) // Parse limit and usage (handle both string and number formats)
var limit, usage int64 var limit, usage int64
if result.StorageQuota.Limit != "" { if result.StorageQuota.Limit != "" {
fmt.Sscanf(result.StorageQuota.Limit, "%d", &limit) _, _ = fmt.Sscanf(result.StorageQuota.Limit, "%d", &limit)
} }
if result.StorageQuota.Usage != "" { if result.StorageQuota.Usage != "" {
fmt.Sscanf(result.StorageQuota.Usage, "%d", &usage) _, _ = fmt.Sscanf(result.StorageQuota.Usage, "%d", &usage)
} }
return &DriveStorageInfo{ return &DriveStorageInfo{

View File

@@ -18,11 +18,11 @@ import (
) )
const ( const (
TierAIPremium = "AI_PREMIUM" TierAIPremium = "AI_PREMIUM"
TierGoogleOneStandard = "GOOGLE_ONE_STANDARD" TierGoogleOneStandard = "GOOGLE_ONE_STANDARD"
TierGoogleOneBasic = "GOOGLE_ONE_BASIC" TierGoogleOneBasic = "GOOGLE_ONE_BASIC"
TierFree = "FREE" TierFree = "FREE"
TierGoogleOneUnknown = "GOOGLE_ONE_UNKNOWN" TierGoogleOneUnknown = "GOOGLE_ONE_UNKNOWN"
TierGoogleOneUnlimited = "GOOGLE_ONE_UNLIMITED" TierGoogleOneUnlimited = "GOOGLE_ONE_UNLIMITED"
) )
@@ -340,7 +340,8 @@ func (s *GeminiOAuthService) ExchangeCode(ctx context.Context, input *GeminiExch
// 对于 code_assist 模式project_id 是必需的,需要调用 Code Assist API // 对于 code_assist 模式project_id 是必需的,需要调用 Code Assist API
// 对于 google_one 模式,使用个人 Google 账号,不需要 project_id配额由 Google 网关自动识别 // 对于 google_one 模式,使用个人 Google 账号,不需要 project_id配额由 Google 网关自动识别
// 对于 ai_studio 模式project_id 是可选的(不影响使用 AI Studio API // 对于 ai_studio 模式project_id 是可选的(不影响使用 AI Studio API
if oauthType == "code_assist" { switch oauthType {
case "code_assist":
if projectID == "" { if projectID == "" {
var err error var err error
projectID, tierID, err = s.fetchProjectID(ctx, tokenResp.AccessToken, proxyURL) projectID, tierID, err = s.fetchProjectID(ctx, tokenResp.AccessToken, proxyURL)
@@ -364,7 +365,7 @@ func (s *GeminiOAuthService) ExchangeCode(ctx context.Context, input *GeminiExch
if tierID == "" { if tierID == "" {
tierID = "LEGACY" tierID = "LEGACY"
} }
} else if oauthType == "google_one" { case "google_one":
// Attempt to fetch Drive storage tier // Attempt to fetch Drive storage tier
tierID, storageInfo, err := s.FetchGoogleOneTier(ctx, tokenResp.AccessToken, proxyURL) tierID, storageInfo, err := s.FetchGoogleOneTier(ctx, tokenResp.AccessToken, proxyURL)
if err != nil { if err != nil {
@@ -523,7 +524,8 @@ func (s *GeminiOAuthService) RefreshAccountToken(ctx context.Context, account *A
// For Code Assist, project_id is required. Auto-detect if missing. // For Code Assist, project_id is required. Auto-detect if missing.
// For AI Studio OAuth, project_id is optional and should not block refresh. // For AI Studio OAuth, project_id is optional and should not block refresh.
if oauthType == "code_assist" { switch oauthType {
case "code_assist":
// 先设置默认值或保留旧值,确保 tier_id 始终有值 // 先设置默认值或保留旧值,确保 tier_id 始终有值
if existingTierID != "" { if existingTierID != "" {
tokenInfo.TierID = existingTierID tokenInfo.TierID = existingTierID
@@ -551,7 +553,7 @@ func (s *GeminiOAuthService) RefreshAccountToken(ctx context.Context, account *A
if strings.TrimSpace(tokenInfo.ProjectID) == "" { if strings.TrimSpace(tokenInfo.ProjectID) == "" {
return nil, fmt.Errorf("failed to auto-detect project_id: empty result") return nil, fmt.Errorf("failed to auto-detect project_id: empty result")
} }
} else if oauthType == "google_one" { case "google_one":
// Check if tier cache is stale (> 24 hours) // Check if tier cache is stale (> 24 hours)
needsRefresh := true needsRefresh := true
if account.Extra != nil { if account.Extra != nil {