package ai import ( "context" "github.com/youruser/base/internal/svc" "github.com/youruser/base/internal/types" "github.com/youruser/base/model" "github.com/zeromicro/go-zero/core/logx" ) type AiSystemKeyListLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewAiSystemKeyListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AiSystemKeyListLogic { return &AiSystemKeyListLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *AiSystemKeyListLogic) AiSystemKeyList(req *types.AIApiKeyListRequest) (resp *types.AIApiKeyListResponse, err error) { var keys []model.AIApiKey var total int64 query := l.svcCtx.DB.WithContext(l.ctx).Model(&model.AIApiKey{}).Where("user_id = 0") if err = query.Count(&total).Error; err != nil { return nil, err } offset := (req.Page - 1) * req.PageSize if offset < 0 { offset = 0 } if err = query.Order("created_at DESC").Offset(int(offset)).Limit(int(req.PageSize)).Find(&keys).Error; err != nil { return nil, err } providerCache := make(map[int64]string) list := make([]types.AIApiKeyInfo, 0, len(keys)) for _, key := range keys { providerName := "" if name, ok := providerCache[key.ProviderId]; ok { providerName = name } else { provider, provErr := model.AIProviderFindOne(l.ctx, l.svcCtx.DB, key.ProviderId) if provErr == nil { providerName = provider.DisplayName } providerCache[key.ProviderId] = providerName } list = append(list, types.AIApiKeyInfo{ Id: key.Id, ProviderId: key.ProviderId, ProviderName: providerName, UserId: 0, KeyPreview: maskKey(key.KeyValue), IsActive: key.IsActive, Remark: key.Remark, CreatedAt: key.CreatedAt.Format("2006-01-02 15:04:05"), }) } return &types.AIApiKeyListResponse{List: list, Total: total}, nil }