func UserFollow(user *models.User, theUser *models.User) { if theUser.Read() == nil { var mutual bool tFollow := models.Follow{User: theUser, FollowUser: user} if err := tFollow.Read("User", "FollowUser"); err == nil { mutual = true } follow := models.Follow{User: user, FollowUser: theUser, Mutual: mutual} if err := follow.Insert(); err == nil && mutual { tFollow.Mutual = mutual tFollow.Update("Mutual") } if nums, err := user.FollowingUsers().Count(); err == nil { user.Following = int(nums) user.Update("Following") } if nums, err := theUser.FollowerUsers().Count(); err == nil { theUser.Followers = int(nums) theUser.Update("Followers") } } }
func UserUnFollow(user *models.User, theUser *models.User) { num, _ := user.FollowingUsers().Filter("FollowUser", theUser.Id).Delete() if num > 0 { theUser.FollowingUsers().Filter("FollowUser", user.Id).Update(orm.Params{ "Mutual": false, }) if nums, err := user.FollowingUsers().Count(); err == nil { user.Following = int(nums) user.Update("Following") } if nums, err := theUser.FollowerUsers().Count(); err == nil { theUser.Followers = int(nums) theUser.Update("Followers") } } }
func (this *UserRouter) getFollows(user *models.User, following bool) []map[string]interface{} { limit := 20 var qs orm.QuerySeter if following { qs = user.FollowingUsers() } else { qs = user.FollowerUsers() } nums, _ := qs.Count() pager := this.SetPaginator(limit, nums) qs = qs.Limit(limit, pager.Offset()) var follows []*models.Follow if following { qs.RelatedSel("FollowUser").All(&follows, "FollowUser") } else { qs.RelatedSel("User").All(&follows, "User") } if len(follows) == 0 { return nil } ids := make([]int, 0, len(follows)) for _, follow := range follows { if following { ids = append(ids, follow.FollowUser.Id) } else { ids = append(ids, follow.User.Id) } } var eids orm.ParamsList this.User.FollowingUsers().Filter("FollowUser__in", ids).ValuesFlat(&eids, "FollowUser__Id") var fids map[int]bool if len(eids) > 0 { fids = make(map[int]bool) for _, id := range eids { tid, _ := utils.StrTo(utils.ToStr(id)).Int() if tid > 0 { fids[tid] = true } } } users := make([]map[string]interface{}, 0, len(follows)) for _, follow := range follows { IsFollowed := false var u *models.User if following { u = follow.FollowUser } else { u = follow.User } if fids != nil { IsFollowed = fids[u.Id] } users = append(users, map[string]interface{}{ "User": u, "IsFollowed": IsFollowed, }) } return users }