You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

71 lines
1.8 KiB

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
}