Example #1
0
func VoteLink(linkId int64, userId int64, score int, siteRunTime string) *Vote {

	var db *goku.MysqlDB = GetDB()
	defer db.Close()

	var update bool = false
	var vote *Vote = &Vote{0, 0, false, ""}
	checkRows, checkErr := db.Query("SELECT `user_id` FROM `link` WHERE `id` = ? LIMIT 0,1", linkId)
	if checkErr != nil {
		goku.Logger().Errorln(checkErr.Error())
		vote.Errors = "数据库错误"
	} else if checkRows.Next() == false {
		vote.Errors = "参数错误"
	} else {
		var luid int64
		checkRows.Scan(&luid)
		if luid == userId {
			vote.Errors = "不可以对自己投票"
		}
	}
	if vote.Errors != "" {
		return vote
	}

	rows, err := db.Query("SELECT score FROM `link_support_record` WHERE `link_id` = ? AND `user_id` = ? LIMIT 0,1", linkId, userId)
	if err == nil {

		var upVote int64
		var downVote int64
		var createTime time.Time
		if rows.Next() { //投过票的情况
			var scoreTemp int
			rows.Scan(&scoreTemp)

			//已投了支持,再投反对
			if scoreTemp == 1 && score == -1 {

				update = true
				rows, err = db.Query("SELECT vote_up,vote_down,create_time FROM `link` WHERE id=?", linkId)
				rows.Next()
				rows.Scan(&upVote, &downVote, &createTime)
				upVote = upVote - 1
				downVote = downVote + 1
				score := utils.LinkSortAlgorithm(createTime, upVote, downVote)
				dispute_score := utils.DisputeLinkSortAlgorithm(upVote, downVote)
				_, err = db.Query("UPDATE `link` SET vote_up=?,vote_down=?,reddit_score=?,dispute_score=? WHERE id=?;", upVote, downVote, score, dispute_score, linkId)
				if err != nil {
					goku.Logger().Errorln(err)
				}
				_, err = db.Query("UPDATE `link_support_record` SET score=-1,vote_time=NOW() WHERE `link_id` = ? AND `user_id` = ?", linkId, userId)
				if err != nil {
					goku.Logger().Errorln(err)
				}

				//已投了反对,再投支持
			} else if scoreTemp == -1 && score == 1 {

				update = true
				rows, err = db.Query("SELECT vote_up,vote_down,create_time FROM `link` WHERE id=?", linkId)
				rows.Next()
				rows.Scan(&upVote, &downVote, &createTime)
				upVote = upVote + 1
				downVote = downVote - 1
				score := utils.LinkSortAlgorithm(createTime, upVote, downVote)
				dispute_score := utils.DisputeLinkSortAlgorithm(upVote, downVote)
				_, err = db.Query("UPDATE `link` SET vote_up=?,vote_down=?,reddit_score=?,dispute_score=? WHERE id=?;", upVote, downVote, score, dispute_score, linkId)
				if err != nil {
					goku.Logger().Errorln(err)
				}
				_, err = db.Query("UPDATE `link_support_record` SET score=1,vote_time=NOW() WHERE `link_id` = ? AND `user_id` = ?", linkId, userId)
				if err != nil {
					goku.Logger().Errorln(err)
				}

			} else {
				vote.Errors = "您已对此投票"
			}

		} else { //没投过票的情况

			update = true
			rows, err = db.Query("SELECT vote_up,vote_down,create_time FROM `link` WHERE id=?", linkId)
			rows.Next()
			rows.Scan(&upVote, &downVote, &createTime)
			if score == 1 {

				upVote = upVote + 1
				score := utils.LinkSortAlgorithm(createTime, upVote, downVote)
				dispute_score := utils.DisputeLinkSortAlgorithm(upVote, downVote)
				_, err = db.Query("UPDATE `link` SET vote_up=?,reddit_score=?,dispute_score=? WHERE id=?;", upVote, score, dispute_score, linkId)
				if err != nil {
					goku.Logger().Errorln(err)
				}

			} else {

				downVote = downVote + 1
				score := utils.LinkSortAlgorithm(createTime, upVote, downVote)
				dispute_score := utils.DisputeLinkSortAlgorithm(upVote, downVote)
				_, err = db.Query("UPDATE `link` SET vote_down=?,reddit_score=?,dispute_score=? WHERE `id`=?;", downVote, score, dispute_score, linkId)
				if err != nil {
					goku.Logger().Errorln(err)
				}

			}
			_, err = db.Query("INSERT INTO `link_support_record` (link_id, user_id, score,vote_time) VALUES (?, ?, ?, NOW())", linkId, userId, score)
			if err != nil {
				goku.Logger().Errorln(err)
			}
		}

		if update {
			vote.Id = linkId
			vote.VoteNum = upVote - downVote
			vote.Success = true
			// 存入`tui_link_for_handle` 链接处理队列表
			_, err = db.Query("INSERT ignore INTO tui_link_for_handle(link_id,create_time,user_id,insert_time,data_type) VALUES (?, ?, ?, NOW(), ?)",
				linkId, createTime, userId, 2)
			if err != nil {
				goku.Logger().Errorln(err)
			}
		}
	}
	if err != nil {
		vote.Success = false
		goku.Logger().Errorln(err.Error())
		vote.Errors = "数据库错误"
	}

	return vote
}
Example #2
0
func VoteComment(commentId int64, userId int64, score int, siteRunTime string) *Vote {

	var db *goku.MysqlDB = GetDB()
	defer db.Close()

	var vote *Vote = &Vote{0, 0, false, ""}
	var updateChildrenScore bool = false

	checkRows, checkErr := db.Query("SELECT `user_id` FROM `comment` WHERE `id` = ? LIMIT 0,1", commentId) //reddit_score
	if checkErr != nil {
		goku.Logger().Errorln(checkErr.Error())
		vote.Errors = "数据库错误"
	} else if checkRows.Next() == false {
		vote.Errors = "参数错误"
	} else {
		var luid int64
		checkRows.Scan(&luid)
		if luid == userId {
			vote.Errors = "不可以对自己投票"
		}
	}
	if vote.Errors != "" {
		return vote
	}

	rows, err := db.Query("SELECT score FROM `comment_support_record` WHERE `comment_id` = ? AND `user_id` = ? LIMIT 0,1", commentId, userId)
	if err == nil {
		var upVote, downVote int64
		if rows.Next() { //投过票的情况
			var scoreTemp int
			rows.Scan(&scoreTemp)
			//已投了支持,再投反对
			if scoreTemp == 1 && score == -1 {

				updateChildrenScore = true
				rows, err = db.Query("SELECT vote_up,vote_down FROM `comment` WHERE id=?", commentId)
				rows.Next()
				rows.Scan(&upVote, &downVote)
				upVote -= 1
				downVote += 1
				score := utils.CommentSortAlgorithm(upVote, downVote)
				dispute_score := utils.DisputeLinkSortAlgorithm(upVote, downVote)
				db.Query("UPDATE `comment` SET vote_up=?,vote_down=?,reddit_score=?,dispute_score=? WHERE id=?;", upVote, downVote, score, dispute_score, commentId)
				db.Query("UPDATE `comment_support_record` SET score=-1,vote_time=NOW() WHERE `comment_id` = ? AND `user_id` = ?", commentId, userId)

			} else if scoreTemp == -1 && score == 1 { //已投了反对,再投支持

				updateChildrenScore = true
				rows, err = db.Query("SELECT vote_up,vote_down FROM `comment` WHERE id=?", commentId)
				rows.Next()
				rows.Scan(&upVote, &downVote)
				upVote += 1
				downVote -= 1
				score := utils.CommentSortAlgorithm(upVote, downVote)
				dispute_score := utils.DisputeLinkSortAlgorithm(upVote, downVote)
				db.Query("UPDATE `comment` SET vote_down=?,vote_up=?,reddit_score=?,dispute_score=? WHERE `id`=?;", downVote, upVote, score, dispute_score, commentId)
				db.Query("UPDATE `comment_support_record` SET score=1,vote_time=NOW() WHERE `comment_id` = ? AND `user_id` = ?", commentId, userId)

			} else {
				vote.Errors = "您已对此投票"
			}

		} else { //没投过票的情况

			updateChildrenScore = true
			rows, err = db.Query("SELECT vote_up,vote_down FROM `comment` WHERE id=?", commentId)
			rows.Next()
			rows.Scan(&upVote, &downVote)
			if score == 1 {
				upVote += 1
				score := utils.CommentSortAlgorithm(upVote, downVote)
				dispute_score := utils.DisputeLinkSortAlgorithm(upVote, downVote)
				db.Query("UPDATE `comment` SET vote_up=?,reddit_score=?,dispute_score=? WHERE id=?;", upVote, score, dispute_score, commentId)

			} else {
				downVote += 1
				score := utils.CommentSortAlgorithm(upVote, downVote)
				dispute_score := utils.DisputeLinkSortAlgorithm(upVote, downVote)
				db.Query("UPDATE `comment` SET vote_down=?,reddit_score=?,dispute_score=? WHERE `id`=?;", downVote, score, dispute_score, commentId)

			}
			db.Query("INSERT INTO `comment_support_record` (comment_id, user_id, score, vote_time) VALUES (?, ?, ?,NOW())", commentId, userId, score)

		}

		if updateChildrenScore {

			//rows, err = db.Query("SELECT vote_up-vote_down AS vote FROM `comment` WHERE `id` = ? LIMIT 0,1", commentId) //, reddit_score,link_id
			//if err == nil && rows.Next() {
			//var voteNum int64 = 0
			vote.Id = commentId
			//rows.Scan(&voteNum) //, &childScore, &linkId
			vote.VoteNum = upVote - downVote
			vote.Success = true
			//}
		}
	}
	if err != nil {
		goku.Logger().Errorln(err.Error())
		vote.Success = false
		vote.Errors = "数据库错误"
	}

	return vote

}