func (c Post) Like(username string, id int) r.Result { likeResponse := models.SimpleJSONResponse{"fail", ""} profile := c.connected() if profile == nil { likeResponse.Message = "You must log in to like a post" return c.RenderJson(likeResponse) } post := c.loadPostById(id) if post == nil { likeResponse.Message = "Post does not exist" return c.Render(likeResponse) } existingLike := &models.Like{} err := c.Txn.SelectOne(existingLike, `select LikeId from Like where UserId = ? and PostId = ?`, profile.User.UserId, post.PostId) if err == nil { likeResponse.Message = "You have already liked this post" } else { // Add like existingLike.LikeId = 0 existingLike.UserId = profile.User.UserId existingLike.PostId = post.PostId lErr := c.Txn.Insert(existingLike) if lErr != nil { panic(lErr) } // Update like increment count on Post post.AggregateLikes += 1 _, pErr := c.Txn.Update(post) if pErr != nil { panic(pErr) } likeResponse.Message = "You have now liked this post" likeResponse.Status = "success" } return c.RenderJson(likeResponse) }
func (c Profile) FollowUser(username string) r.Result { followResponse := models.SimpleJSONResponse{"fail", ""} profile := c.connected() if profile == nil { followResponse.Message = "You must log in to follow another user" return c.RenderJson(followResponse) } if profile.UserName == username { followResponse.Message = "You cannot follow yourself" return c.Render(followResponse) } // Get followed user profile followProfile := c.loadProfileByUserName(username) if followProfile == nil { followResponse.Message = "User with that username not found" return c.RenderJson(followResponse) } var followerObj models.Follower err := c.Txn.SelectOne(&followerObj, `select * from Follower where UserId = ? and FollowUserId = ?`, profile.User.UserId, followProfile.User.UserId) if err != nil { // Add new follower followerObj = models.Follower{ UserId: profile.User.UserId, FollowUserId: followProfile.User.UserId, } lErr := c.Txn.Insert(&followerObj) if lErr != nil { panic(lErr) } // Update aggregate follower count on Followed Profile followProfile.AggregateFollowers += 1 _, pErr := c.Txn.Update(followProfile) if pErr != nil { panic(pErr) } // Update aggregate following count on Current User Profile profile.AggregateFollowing += 1 _, p2Err := c.Txn.Update(profile) if p2Err != nil { panic(p2Err) } followResponse.Message = "You are now following this user" followResponse.Status = "success" } else { // Remove existing follower _, dErr := c.Txn.Delete(&followerObj) if dErr != nil { panic(dErr) } // Update aggregate follower count on Followed Profile followProfile.AggregateFollowers -= 1 _, pErr := c.Txn.Update(followProfile) if pErr != nil { panic(pErr) } // Update aggregate following count on Current User Profile profile.AggregateFollowing -= 1 _, p2Err := c.Txn.Update(profile) if p2Err != nil { panic(p2Err) } followResponse.Message = "You are no longer following this user" followResponse.Status = "success" } return c.RenderJson(followResponse) }