feat: 自动识别帖子的标签,并把标签插入到数据库
This commit is contained in:
parent
0b7cd36b26
commit
4069fe50c3
@ -137,6 +137,11 @@ func UpdateWorkImage(ctx *gin.Context) {
|
||||
// service.Error(ctx, err)
|
||||
// return
|
||||
//}
|
||||
// 处理内容中的标签:提取、验证并批量导入
|
||||
if err = processContentTags(ctx, req.Content); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
req.Source = 1
|
||||
resp, err := service.CastProvider.UpdateWorkImage(newCtx, req)
|
||||
@ -171,6 +176,72 @@ func UpdateWorkImage(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
func processContentTags(ctx *gin.Context, content string) error {
|
||||
// 如果内容为空,直接返回
|
||||
if content == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 提取标签
|
||||
tags := utils.ExtractTags(content)
|
||||
if len(tags) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 第一步:检查标签格式(验证标签不为空且有效)
|
||||
validTags := make([]string, 0, len(tags))
|
||||
for _, tag := range tags {
|
||||
// 去除空白字符后检查
|
||||
cleanTag := strings.TrimSpace(tag)
|
||||
if cleanTag != "" {
|
||||
validTags = append(validTags, cleanTag)
|
||||
}
|
||||
}
|
||||
|
||||
// 如果没有有效标签,直接返回
|
||||
if len(validTags) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 第二步:检查标签数量是否超过5个
|
||||
if len(validTags) > 5 {
|
||||
return errors.New("帖子标签数量不能超过5个")
|
||||
}
|
||||
|
||||
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: 4, // 4: 自动标签(从内容中自动提取)
|
||||
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
|
||||
}
|
||||
|
||||
zap.L().Info("processContentTags success", zap.Int("tagCount", len(validTags)), zap.Strings("tags", validTags))
|
||||
return nil
|
||||
}
|
||||
|
||||
func UpdateWorkVideo(ctx *gin.Context) {
|
||||
var req *cast.UpdateWorkVideoReq
|
||||
var infoResp *accountFiee.UserInfoResponse
|
||||
@ -266,6 +337,11 @@ func UpdateWorkVideo(ctx *gin.Context) {
|
||||
req.ArtistPhone = infoResp.TelNum
|
||||
req.ArtistPhoneAreaCode = infoResp.TelAreaCode
|
||||
req.ArtistSubNum = infoResp.SubNum
|
||||
// 处理内容中的标签:提取、验证并批量导入
|
||||
if err = processContentTags(ctx, req.Content); err != nil {
|
||||
service.Error(ctx, err)
|
||||
return
|
||||
}
|
||||
newCtx := NewCtxWithUserInfo(ctx)
|
||||
req.Source = 1
|
||||
resp, err := service.CastProvider.UpdateWorkVideo(newCtx, req)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user