feat: 自动识别帖子的标签,并把标签插入到数据库
This commit is contained in:
parent
0b7cd36b26
commit
4069fe50c3
@ -137,6 +137,11 @@ func UpdateWorkImage(ctx *gin.Context) {
|
|||||||
// service.Error(ctx, err)
|
// service.Error(ctx, err)
|
||||||
// return
|
// return
|
||||||
//}
|
//}
|
||||||
|
// 处理内容中的标签:提取、验证并批量导入
|
||||||
|
if err = processContentTags(ctx, req.Content); err != nil {
|
||||||
|
service.Error(ctx, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
newCtx := NewCtxWithUserInfo(ctx)
|
newCtx := NewCtxWithUserInfo(ctx)
|
||||||
req.Source = 1
|
req.Source = 1
|
||||||
resp, err := service.CastProvider.UpdateWorkImage(newCtx, req)
|
resp, err := service.CastProvider.UpdateWorkImage(newCtx, req)
|
||||||
@ -171,6 +176,72 @@ func UpdateWorkImage(ctx *gin.Context) {
|
|||||||
return
|
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) {
|
func UpdateWorkVideo(ctx *gin.Context) {
|
||||||
var req *cast.UpdateWorkVideoReq
|
var req *cast.UpdateWorkVideoReq
|
||||||
var infoResp *accountFiee.UserInfoResponse
|
var infoResp *accountFiee.UserInfoResponse
|
||||||
@ -266,6 +337,11 @@ func UpdateWorkVideo(ctx *gin.Context) {
|
|||||||
req.ArtistPhone = infoResp.TelNum
|
req.ArtistPhone = infoResp.TelNum
|
||||||
req.ArtistPhoneAreaCode = infoResp.TelAreaCode
|
req.ArtistPhoneAreaCode = infoResp.TelAreaCode
|
||||||
req.ArtistSubNum = infoResp.SubNum
|
req.ArtistSubNum = infoResp.SubNum
|
||||||
|
// 处理内容中的标签:提取、验证并批量导入
|
||||||
|
if err = processContentTags(ctx, req.Content); err != nil {
|
||||||
|
service.Error(ctx, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
newCtx := NewCtxWithUserInfo(ctx)
|
newCtx := NewCtxWithUserInfo(ctx)
|
||||||
req.Source = 1
|
req.Source = 1
|
||||||
resp, err := service.CastProvider.UpdateWorkVideo(newCtx, req)
|
resp, err := service.CastProvider.UpdateWorkVideo(newCtx, req)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user