package api import ( "context" "fmt" "strconv" "strings" "time" "github.com/zhenghaoz/gorse/client" ) var gorse *client.GorseClient func GorseInit(host string, port int) { gorse = client.NewGorseClient(fmt.Sprintf("http://%s:%d", host, port), "") } // 同步图片数据 func PutImages(page int) error { var ctx context.Context = context.Background() for i := 0; i < page; i++ { var items []client.Item var data []Image if err := db.Table("web_images").Select("id", "tags", "create_time").Limit(100).Offset(i * 100).Scan(&data).Error; err != nil { fmt.Println("获取图像记录失败", err) return err } for _, item := range data { fmt.Println(item.ID, item.Tags, item.CreateTime) items = append(items, client.Item{ ItemId: fmt.Sprintf("%d", item.ID), Timestamp: item.CreateTime.Format("2006-01-02 15:04:05"), Labels: strings.Split(item.Tags, ", "), Comment: fmt.Sprintf("%d", item.Content), }) } if _, err := gorse.InsertItems(ctx, items); err != nil { fmt.Println("写入图像记录失败", err) return err } } fmt.Println("写入图像记录结束..", page*100) return nil } // 同步点赞数据 func PutPraises(page int) error { var ctx context.Context = context.Background() for i := 0; i < page; i++ { var feedbacks []client.Feedback var data []struct { ID int PraiseID int UserID int CreateTime time.Time } if err := db.Table("web_praise").Select("id", "praise_id", "user_id", "create_time").Where("gorse = false").Where("type = ?", 4).Limit(100).Scan(&data).Error; err != nil { fmt.Println("获取图像点赞记录失败", err) return err } var ids []int for _, item := range data { fmt.Println(item.ID, item.UserID, item.PraiseID, item.CreateTime) feedbacks = append(feedbacks, client.Feedback{ FeedbackType: "like", UserId: fmt.Sprintf("%d", item.UserID), ItemId: fmt.Sprintf("%d", item.PraiseID), Timestamp: item.CreateTime.Format("2006-01-02 15:04:05"), }) ids = append(ids, item.ID) } if err := db.Table("web_praise").Where("id in (?)", data).Update("gorse", true).Error; err != nil { fmt.Println("更新点赞记录失败", err) return err } if _, err := gorse.InsertFeedback(ctx, feedbacks); err != nil { fmt.Println("写入点赞记录失败", err) return err } } fmt.Println("写入点赞记录结束..", page*100) return nil } // 同步收藏数据 // 获取推荐ID func GetRecommend(user_id int, categorys []string) ([]int, error) { var ctx context.Context = context.Background() var ids []int data, err := gorse.GetItemRecommend(ctx, fmt.Sprintf("%d", user_id), categorys, "read", "0", 100, 0) if err != nil { fmt.Println("获取推荐失败", err) return ids, err } for _, item := range data { id, _ := strconv.Atoi(item) ids = append(ids, id) } return ids, nil }