feat: 把标签保存到数据库提取出来,自动标签自动保存
This commit is contained in:
parent
d34cef19c3
commit
96d5c78b11
@ -173,6 +173,66 @@ func RecalculateCastTagQuoteCount(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// findNewTags 对比两次标签,找出新增的标签
|
||||
func findNewTags(beforeTags, afterTags []string) []string {
|
||||
// 将 beforeTags 转换为 map,方便查找
|
||||
beforeMap := make(map[string]bool)
|
||||
for _, tag := range beforeTags {
|
||||
cleanTag := strings.TrimSpace(tag)
|
||||
if cleanTag != "" {
|
||||
beforeMap[cleanTag] = true
|
||||
}
|
||||
}
|
||||
|
||||
// 找出 afterTags 中不在 beforeTags 中的标签
|
||||
newTags := make([]string, 0)
|
||||
for _, tag := range afterTags {
|
||||
cleanTag := strings.TrimSpace(tag)
|
||||
if cleanTag != "" && !beforeMap[cleanTag] {
|
||||
newTags = append(newTags, cleanTag)
|
||||
}
|
||||
}
|
||||
|
||||
return newTags
|
||||
}
|
||||
|
||||
// SaveTagsToDatabase 将标签保存到数据库
|
||||
func SaveTagsToDatabase(ctx *gin.Context, tags []string, source uint32) error {
|
||||
if len(tags) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
userInfo := login.GetUserInfoFromC(ctx)
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
|
||||
// 构建批量导入请求
|
||||
req := cast.UpdateCastTagBatchReq{
|
||||
Data: make([]*cast.CastTagInfo, 0, len(tags)),
|
||||
}
|
||||
|
||||
for _, tag := range tags {
|
||||
tagInfo := &cast.CastTagInfo{
|
||||
HashTag: tag,
|
||||
CreatorUuid: fmt.Sprint(userInfo.ID),
|
||||
CreatorName: userInfo.Name,
|
||||
Source: source, // 4: 自动标签(从内容中自动提取)
|
||||
Status: 1, // 1: 有效
|
||||
}
|
||||
req.Data = append(req.Data, tagInfo)
|
||||
}
|
||||
|
||||
// 调用批量导入接口
|
||||
_, err := service.CastProvider.UpdateCastTagBatch(newCtx, &req)
|
||||
if err != nil {
|
||||
zap.L().Error("SaveTagsToDatabase UpdateCastTagBatch failed", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
zap.L().Info("SaveTagsToDatabase success", zap.Int("tagCount", len(tags)), zap.Strings("tags", tags), zap.Uint32("source", source))
|
||||
return nil
|
||||
}
|
||||
|
||||
// AutoHashtags 自动生成标签
|
||||
func AutoHashtags(ctx *gin.Context) {
|
||||
var req *aryshare.AutoHashtagsRequest
|
||||
@ -192,12 +252,12 @@ func AutoHashtags(ctx *gin.Context) {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
// 调用 utils 提取标签
|
||||
tags := utils.ExtractTags(req.Post)
|
||||
fmt.Println("tags", tags)
|
||||
// 调用 utils 提取生成前的标签
|
||||
beforeTags := utils.ExtractTags(req.Post)
|
||||
fmt.Println("beforeTags", beforeTags)
|
||||
// 根据这里的tags 的数量,来决定 req.Max 的值
|
||||
// 确保标签总数是5
|
||||
if len(tags) >= 5 {
|
||||
if len(beforeTags) >= 5 {
|
||||
// 直接返回当前帖子的标签已经有5个了
|
||||
service.Success(ctx, map[string]interface{}{
|
||||
"message": "当前帖子的标签已经有5个了",
|
||||
@ -205,8 +265,8 @@ func AutoHashtags(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
// 确保标签总数是5
|
||||
if len(tags) < 5 {
|
||||
req.Max = int32(5 - len(tags))
|
||||
if len(beforeTags) < 5 {
|
||||
req.Max = int32(5 - len(beforeTags))
|
||||
}
|
||||
if req.Position == "" {
|
||||
// 未设置位置,默认使用末尾
|
||||
@ -219,10 +279,29 @@ func AutoHashtags(ctx *gin.Context) {
|
||||
// 调用 Ayrshare 的 AutoHashtags 接口
|
||||
resp, err := service.AyrshareProvider.AutoHashtags(context.Background(), req)
|
||||
if err != nil {
|
||||
err = errors.New("自动生成标签失败")
|
||||
zap.L().Error("AutoHashtags failed", zap.Error(err))
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 提取生成后的标签
|
||||
afterTags := utils.ExtractTags(resp.Post)
|
||||
fmt.Println("afterTags", afterTags)
|
||||
|
||||
// 对比两次标签,找出新增的标签
|
||||
newTags := findNewTags(beforeTags, afterTags)
|
||||
if len(newTags) > 0 {
|
||||
// 将新增的标签保存到数据库,Source 设置为 4(自动标签)
|
||||
if err = SaveTagsToDatabase(ctx, newTags, 4); err != nil {
|
||||
fmt.Println("报错标签保存到数据库失败", newTags)
|
||||
zap.L().Error("SaveTagsToDatabase failed", zap.Error(err), zap.Strings("newTags", newTags))
|
||||
err = errors.New("标签保存到数据库失败")
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
service.Success(ctx, resp)
|
||||
return
|
||||
}
|
||||
|
||||
@ -210,32 +210,10 @@ func processContentTags(ctx *gin.Context, content string) error {
|
||||
|
||||
fmt.Println("validTags", validTags)
|
||||
|
||||
// 第三步:调用 UpdateCastTagBatch 接口批量导入标签
|
||||
userInfo := login.GetUserInfoFromC(ctx)
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
|
||||
// 构建批量导入请求
|
||||
req := cast.UpdateCastTagBatchReq{
|
||||
Data: make([]*cast.CastTagInfo, 0, len(validTags)),
|
||||
}
|
||||
|
||||
for _, tag := range validTags {
|
||||
tagInfo := &cast.CastTagInfo{
|
||||
HashTag: tag,
|
||||
CreatorUuid: fmt.Sprint(userInfo.ID),
|
||||
CreatorName: userInfo.Name,
|
||||
Source: 3, // 3: 推荐标签(推荐的标签)
|
||||
Status: 1, // 1: 有效
|
||||
}
|
||||
req.Data = append(req.Data, tagInfo)
|
||||
}
|
||||
|
||||
// 调用批量导入接口
|
||||
_, err := service.CastProvider.UpdateCastTagBatch(newCtx, &req)
|
||||
if err != nil {
|
||||
err = errors.New("批量导入标签失败")
|
||||
zap.L().Error("processContentTags UpdateCastTagBatch failed", zap.Error(err))
|
||||
return err
|
||||
// 第三步:调用 SaveTagsToDatabase 函数批量导入标签,Source 设置为 3(推荐标签)
|
||||
if err := SaveTagsToDatabase(ctx, validTags, 3); err != nil {
|
||||
zap.L().Error("processContentTags SaveTagsToDatabase failed", zap.Error(err))
|
||||
return errors.New("批量导入标签失败")
|
||||
}
|
||||
|
||||
zap.L().Info("processContentTags success", zap.Int("tagCount", len(validTags)), zap.Strings("tags", validTags))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user