Пример #1
0
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)

}
Пример #2
0
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)

}