func SetLikeSign(pagination *db.Pagination, userId int64) { //设置当前用户点赞标记 if len(pagination.Data) < 1 || userId <= 0 { return } ids, err := utils.ExtractFieldValues(pagination.Data, "Id") if nil != err { return } signs := ArticleLikeLogs(userId, ids) signMap := make(map[int64]bool) for _, v := range signs { signMap[v] = true } var articles []entities.Article for _, v := range pagination.Data { article := v.(entities.Article) article.HasLike = signMap[article.Id] articles = append(articles, article) } pagination.SetData(articles) }
func ArticlesGyCategory(userId int64, category string, pagination *db.Pagination, isFilterUserId bool) { db := db.NewDB() var articles []entities.Article query := db.From("article") if userId > 0 && isFilterUserId { query.Where("user_id", userId) } if len(category) > 0 { category = strings.ToLower(category) beego.Error("category", category) query.Like("categories", "%"+category+"%") } query.OrderBy("created_at desc").FillPagination(&articles, pagination) //设置当前用户点赞标记 if len(pagination.Data) < 1 || userId <= 0 { return } ids, err := utils.ExtractFieldValues(pagination.Data, "Id") if nil != err { return } if userId > 0 { signs := ArticleLikeLogs(userId, ids) signMap := make(map[int64]bool) for _, v := range signs { signMap[v] = true } var newArticles []entities.Article for _, v := range articles { v.HasLike = signMap[v.Id] newArticles = append(newArticles, v) } pagination.SetData(newArticles) newArticles = setUser(newArticles) pagination.SetData(newArticles) } }
func setUser(articles []entities.Article) []entities.Article { userIds, err := utils.ExtractFieldValues(articles, "UserId") if nil != err { return articles } userMap := UserMap(userIds) var newArticles []entities.Article for _, article := range articles { userId := article.UserId user := userMap[userId] article.User = user newArticles = append(newArticles, article) } return newArticles }
func TestExtractFieldValues(t *testing.T) { var users []entities.User users = append(users, entities.User{Id: 1, Name: "第1个"}) users = append(users, entities.User{Id: 2, Name: "第2个"}) users = append(users, entities.User{Id: 3, Name: "第3个"}) users = append(users, entities.User{Id: 4, Name: "第4个"}) users = append(users, entities.User{Id: 5, Name: "第5个"}) users = append(users, entities.User{Id: 6, Name: "第6个"}) ids, err := utils.ExtractFieldValues(users, "Id") if nil != err { fmt.Println("err:", err) } for _, id := range ids { fmt.Println("id:", id) } str := utils.SliceToString(ids, ",") fmt.Println("str:", str) }