2026-08-09 10:43:45 +08:00
|
|
|
package bookmark
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
|
|
2026-08-09 12:41:08 +08:00
|
|
|
"bsm/full/module/base/cloud/internal/impl"
|
|
|
|
|
"bsm/full/module/base/cloud/internal/models"
|
|
|
|
|
pb "bsm/full/module/base/cloud/pb"
|
2026-08-09 10:43:45 +08:00
|
|
|
"git.apinb.com/bsm-sdk/core/errcode"
|
|
|
|
|
"git.apinb.com/bsm-sdk/core/printer"
|
|
|
|
|
"git.apinb.com/bsm-sdk/core/service"
|
|
|
|
|
"git.apinb.com/bsm-sdk/core/utils"
|
|
|
|
|
"git.apinb.com/bsm-sdk/core/vars"
|
|
|
|
|
"git.apinb.com/bsm-sdk/engine/types"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 导入书签
|
|
|
|
|
func ImportBookmarks(ctx context.Context, in *pb.ImportBookmarksRequest) (reply *pb.StatusReply, err error) {
|
|
|
|
|
// parse authorization meta.
|
|
|
|
|
auth, err := service.ParseMetaCtx(ctx, nil)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// validate request
|
|
|
|
|
if strings.TrimSpace(in.Data) == "" {
|
|
|
|
|
return nil, errcode.ErrInvalidArgument
|
|
|
|
|
}
|
|
|
|
|
if strings.TrimSpace(in.Format) == "" {
|
|
|
|
|
in.Format = "json"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// logic code
|
|
|
|
|
// 解析JSON数据
|
|
|
|
|
var bookmarks []map[string]interface{}
|
|
|
|
|
if err := json.Unmarshal([]byte(in.Data), &bookmarks); err != nil {
|
|
|
|
|
printer.Error("Parse bookmarks data error: %v", err)
|
|
|
|
|
return nil, errcode.ErrInvalidArgument
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 批量创建书签
|
|
|
|
|
var records []models.CloudBookmark
|
|
|
|
|
for _, item := range bookmarks {
|
|
|
|
|
title, _ := item["title"].(string)
|
|
|
|
|
url, _ := item["url"].(string)
|
|
|
|
|
description, _ := item["description"].(string)
|
|
|
|
|
category, _ := item["category"].(string)
|
|
|
|
|
tags, _ := item["tags"].(string)
|
|
|
|
|
icon, _ := item["icon"].(string)
|
|
|
|
|
isPrivate, _ := item["is_private"].(bool)
|
|
|
|
|
|
|
|
|
|
if title == "" || url == "" {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
record := models.CloudBookmark{
|
|
|
|
|
Std_IICUDS: types.Std_IICUDS{
|
|
|
|
|
Identity: utils.UUID(),
|
|
|
|
|
},
|
|
|
|
|
Std_Passport: types.Std_Passport{
|
|
|
|
|
PassportID: auth.ID,
|
|
|
|
|
PassportIdentity: auth.Identity,
|
|
|
|
|
},
|
|
|
|
|
CloudBase: models.CloudBase{
|
|
|
|
|
CloudID: 1, // 默认云空间ID
|
|
|
|
|
CloudIdentity: "default",
|
|
|
|
|
},
|
|
|
|
|
Title: title,
|
|
|
|
|
URL: url,
|
|
|
|
|
Description: description,
|
|
|
|
|
Category: category,
|
|
|
|
|
Tags: tags,
|
|
|
|
|
Icon: icon,
|
|
|
|
|
IsPrivate: isPrivate,
|
|
|
|
|
}
|
|
|
|
|
records = append(records, record)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(records) > 0 {
|
|
|
|
|
if err := impl.DBService.CreateInBatches(records, 100).Error; err != nil {
|
|
|
|
|
printer.Error("Import bookmarks error: %v", err)
|
|
|
|
|
return nil, errcode.ErrDB
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &pb.StatusReply{
|
|
|
|
|
Details: vars.OK,
|
|
|
|
|
Timeseq: time.Now().UnixMilli(),
|
|
|
|
|
}, nil
|
|
|
|
|
}
|