1. 28 Feb, 2026 5 commits
    • QTom's avatar
      test(sora): 补充测试 stub 中缺失的 AddGroupToAllowedGroups 方法 · 6f9e6903
      QTom authored
      feat/admin-apikey-group-update 分支给 UserRepository 接口新增了
      AddGroupToAllowedGroups 方法,需要在测试 stub 中补充实现以通过编译。
      - sora_client_handler_test.go: stubUserRepoForHandler
      - sora_generation_service_test.go: stubUserRepoForQuota
      6f9e6903
    • QTom's avatar
      feat(admin): 完整实现管理员修改用户 API Key 分组的功能 · 9a91815b
      QTom authored
      ## 核心功能
      - 添加 AdminUpdateAPIKeyGroupID 服务方法,支持绑定/解绑/保持不变三态语义
      - 实现 UserRepository.AddGroupToAllowedGroups 接口,自动同步专属分组权限
      - 添加 HTTP PUT /api-keys/:id handler 端点,支持管理员直接修改 API Key 分组
      
      ## 事务一致性
      - 使用 ent Tx 保证专属分组绑定时「添加权限」和「更新 Key」的原子性
      - Repository 方法支持 clientFromContext,兼容事务内调用
      - 事务失败时自动回滚,避免权限孤立
      
      ## 业务逻辑
      - 订阅类型分组阻断,需通过订阅管理流程
      - 非活跃分组拒绝绑定
      - 负 ID 和非法 ID 验证
      - 自动授权响应,告知管理员成功授权的分组
      
      ## 代码质量
      - 16 个单元测试覆盖所有业务路径和边界用例
      - 7 个 handler 集成测试覆盖 HTTP 层
      - GroupRepo stub 返回克隆副本,防止测试间数据泄漏
      - API 类型安全修复(PaginatedResponse<ApiKey>)
      - 前端 ref 回调类型对齐 Vue 规范
      
      ## 国际化支持
      - 中英文提示信息完整
      - 自动授权成功/失败提示
      9a91815b
    • QTom's avatar
      feat(admin): 添加管理员直接修改用户 API Key 分组的功能 · 000e621e
      QTom authored
      - 新增 PUT /api/v1/admin/api-keys/:id 端点,允许管理员修改任意用户 API Key 的分组绑定
      - 跳过用户级权限校验但保留分组有效性验证,修改后触发认证缓存失效
      - Service 层支持三态语义:nil=不修改,0=解绑,>0=绑定,<0=拒绝
      - 指针值拷贝保证安全隔离,负数 groupID 返回 400 INVALID_GROUP_ID
      - 前端 UserApiKeysModal 新增可点击的分组选择下拉框,支持多 Key 并发更新
      - 下拉支持视口翻转和滚动关闭,按钮有 disabled 和加载状态
      - 覆盖:后端 20 个单元测试 (Service 11 + Handler 9) + 前端 16 个 E2E 测试
      - golangci-lint 0 issues, make test-unit 全部通过
      000e621e
    • yangjianbo's avatar
      1d1fc019
    • yangjianbo's avatar
      feat(sync): full code sync from release · bb664d9b
      yangjianbo authored
      bb664d9b
  2. 26 Feb, 2026 1 commit
  3. 25 Feb, 2026 1 commit
  4. 24 Feb, 2026 5 commits
    • erio's avatar
      fix: enable Gemini model_mapping UI and extend warmup to Antigravity · d8d4b0c0
      erio authored
      - Remove Gemini platform exclusion from model restriction UI in
        Create/Edit account modals (Gemini now supports model_mapping)
      - Remove outdated Gemini model passthrough info cards
      - Add model_mapping field to GeminiCredentials type
      - Extend warmup request interception toggle to Antigravity platform
      - Remove redundant try/catch in API key account creation
      - Remove noisy gateway.request_completed debug log
      - Reorganize Gemini model mapping sections in constants.go
      d8d4b0c0
    • cagedbird043's avatar
    • erio's avatar
      test: add warmup request interception unit tests · 86bc76e3
      erio authored
      Add comprehensive tests for warmup request interception behavior
      covering Antigravity accounts with various credential configurations.
      86bc76e3
    • erio's avatar
      refactor: extract failover error handling into FailoverState · 09166a52
      erio authored
      - Extract duplicated failover logic from gateway_handler.go (3 places)
        and gemini_v1beta_handler.go into shared failover_loop.go
      - Introduce FailoverState with HandleFailoverError and HandleSelectionExhausted
      - Move helper functions (needForceCacheBilling, sleepWithContext) into failover_loop.go
      - Add comprehensive unit tests (32+ test cases)
      - Delete redundant gateway_handler_single_account_retry_test.go
      09166a52
    • erio's avatar
      feat: add mixed-channel precheck API for account-group binding · aaac1aac
      erio authored
      Add a dedicated CheckMixedChannel endpoint that allows the frontend
      to pre-validate mixed channel risk before submitting create/update
      requests. This improves UX by showing warnings earlier in the flow
      instead of only after form submission.
      
      Backend changes:
      - Add CheckMixedChannelRequest struct and CheckMixedChannel handler
      - Register POST /check-mixed-channel route
      - Expose CheckMixedChannelRisk as public method on AdminService
      - Simplify Create/Update 409 responses (remove details/require_confirmation)
      - Add comprehensive handler tests and stub methods
      
      Frontend changes:
      - Add checkMixedChannelRisk API function and TypeScript types
      - Refactor CreateAccountModal to precheck before step transition and submission
      - Refactor EditAccountModal to precheck before update submission
      - Replace pendingPayload pattern with action-based dialog flow
      aaac1aac
  5. 23 Feb, 2026 1 commit
  6. 22 Feb, 2026 4 commits
  7. 21 Feb, 2026 1 commit
  8. 20 Feb, 2026 1 commit
  9. 19 Feb, 2026 7 commits
  10. 18 Feb, 2026 1 commit
  11. 17 Feb, 2026 1 commit
  12. 14 Feb, 2026 3 commits
  13. 12 Feb, 2026 7 commits
  14. 11 Feb, 2026 2 commits
    • kyx236's avatar
      feat(admin): Add group filtering for account listings · fe1d46a8
      kyx236 authored
      - Add groupID parameter to ListAccounts and ListWithFilters methods
      - Implement account filtering by group ID in repository query
      - Add group query parameter parsing in account handler
      - Update all ListAccounts/ListWithFilters call sites with groupID parameter
      - Add group filter UI component to AccountTableFilters
      - Add i18n translations for group filter label in English and Chinese
      - Update API contract and test stubs to reflect new signature
      - Enable filtering accounts by their assigned groups in admin panel
      fe1d46a8
    • kyx236's avatar
      feat(admin): Add email search and rate limit filtering for accounts and redeem codes · 04a1a7c2
      kyx236 authored
      - Add used_by_email column to redeem code export CSV for better user identification
      - Implement rate_limited status filter in account listing with RateLimitResetAt check
      - Extend redeem code search to include user email in addition to code matching
      - Add API key search capability to user listing filters
      - Display user email in redeem code table used_by column for improved visibility
      - Update search placeholders in UI to reflect expanded search capabilities (email, username, notes, API key)
      - Improve Chinese and English localization strings for search hints
      04a1a7c2