// 获取用户列表. // @page: 从1开始的页数 // @return: users, total-count, err func User_GetList(page, pagesize int, order string) ([]User, int64, error) { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Limit = pagesize qi.Offset = pagesize * page if order == "" { qi.Order = "id desc" } else { qi.Order = order } var users []User err := db.GetStructs(&users, qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil, 0, err } total, err := db.Count("user", "") if err != nil { goku.Logger().Errorln(err.Error()) } return users, total, nil }
// 获取由用户收藏的link // @page: 从1开始 func FavoriteLink_ByUser(userId int64, page, pagesize int) []Link { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Fields = "l.id, l.user_id, l.title, l.context, l.topics, l.vote_up, l.vote_down, l.view_count, l.comment_count, l.create_time" qi.Join = " ufl INNER JOIN `link` l ON ufl.link_id=l.id" qi.Where = "ufl.user_id=?" qi.Params = []interface{}{userId} qi.Limit = pagesize qi.Offset = pagesize * page qi.Order = "ufl.create_time desc" rows, err := db.Select("user_favorite_link", qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil } links := make([]Link, 0) for rows.Next() { link := Link{} err = rows.Scan(&link.Id, &link.UserId, &link.Title, &link.Context, &link.Topics, &link.VoteUp, &link.VoteDown, &link.ViewCount, &link.CommentCount, &link.CreateTime) if err != nil { goku.Logger().Errorln(err.Error()) return nil } links = append(links, link) } return links }
// 获取关注topicId的用户列表 func Topic_GetFollowers(topicId int64, page, pagesize int) ([]User, error) { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Fields = "u.id, u.name, u.email, u.user_pic" qi.Join = " tf INNER JOIN `user` u ON tf.user_id=u.id" qi.Where = "tf.topic_id=?" qi.Params = []interface{}{topicId} qi.Limit = pagesize qi.Offset = pagesize * page qi.Order = "u.id desc" rows, err := db.Select("topic_follow", qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil, err } defer rows.Close() users := make([]User, 0) for rows.Next() { user := User{} err = rows.Scan(&user.Id, &user.Name, &user.Email, &user.UserPic) if err != nil { goku.Logger().Errorln(err.Error()) return nil, err } users = append(users, user) } return users, nil }
// @page: 从1开始 // @return: topics, total-count, err func Topic_GetByPage(page, pagesize int, order string) ([]Topic, int64, error) { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Limit = pagesize qi.Offset = page * pagesize if order == "" { qi.Order = "id desc" } else { qi.Order = order } var topics []Topic err := db.GetStructs(&topics, qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil, 0, err } total, err := db.Count("topic", "") if err != nil { goku.Logger().Errorln(err.Error()) } return topics, total, nil }
// 获取收到的评论列表 // @page: 从1开始 // @return: comments, total-count, err func CommentForUser_GetByPage(userId int64, page, pagesize int, order string) ([]Comment, int64, error) { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Limit = pagesize qi.Offset = page * pagesize qi.Where = "cfu.user_id=?" qi.Join = " cfu INNER JOIN `comment` c ON cfu.comment_id=c.id" qi.Fields = `c.id, c.user_id, c.link_id, c.parent_path, c.children_count, c.top_parent_id, c.parent_id, c.deep, c.status, c.content, c.create_time, c.vote_up, c.vote_down, c.reddit_score` if order == "" { qi.Order = "create_time desc" } else { qi.Order = order } qi.Params = []interface{}{userId} rows, err := db.Select("comment_for_user", qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil, 0, err } defer rows.Close() comments := make([]Comment, 0) for rows.Next() { c := Comment{} err = rows.Scan(&c.Id, &c.UserId, &c.LinkId, &c.ParentPath, &c.ChildrenCount, &c.TopParentId, &c.ParentId, &c.Deep, &c.Status, &c.Content, &c.CreateTime, &c.VoteUp, &c.VoteDown, &c.RedditScore) if err != nil { goku.Logger().Errorln(err.Error()) return nil, 0, err } comments = append(comments, c) } total, err := db.Count("comment_for_user", "user_id=?", userId) if err != nil { goku.Logger().Errorln(err.Error()) } return comments, total, nil }
// 获取属于某用户的link // @page: 从1开始 // @orderType: 排序类型, hot:热门, hotc:热议, time:最新, vote:投票得分, ctvl:争议 func Link_ForUser(userId int64, orderType string, page, pagesize int) ([]Link, error) { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Fields = "l.id, l.user_id, l.title, l.context, l.topics, l.vote_up, l.vote_down, l.view_count, l.click_count, l.comment_count, l.create_time" qi.Join = " ul INNER JOIN `link` l ON ul.link_id=l.id" qi.Where = "ul.user_id=?" qi.Params = []interface{}{userId} qi.Limit = pagesize qi.Offset = pagesize * page switch orderType { case golink.ORDER_TYPE_TIME: // 最新 qi.Order = "l.id desc" case golink.ORDER_TYPE_HOTC: // 热议 qi.Order = "l.comment_count desc, id desc" case golink.ORDER_TYPE_CTVL: // 争议 qi.Order = "l.dispute_score desc, id desc" case golink.ORDER_TYPE_VOTE: // 得分 qi.Order = "l.vote_up desc, id desc" default: qi.Order = "l.reddit_score desc, id desc" } rows, err := db.Select(LinkForUser_TableName(userId), qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil, err } defer rows.Close() links := make([]Link, 0) for rows.Next() { link := Link{} err = rows.Scan(&link.Id, &link.UserId, &link.Title, &link.Context, &link.Topics, &link.VoteUp, &link.VoteDown, &link.ViewCount, &link.ClickCount, &link.CommentCount, &link.CreateTime) if err != nil { goku.Logger().Errorln(err.Error()) return nil, err } links = append(links, link) } return links, nil }
func Topic_GetTops(page, pagesize int) ([]Topic, error) { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Limit = pagesize qi.Offset = page * pagesize qi.Order = "link_count desc" var topics []Topic err := db.GetStructs(&topics, qi) if err != nil { goku.Logger().Errorln(err.Error()) } return topics, err }
// 获取由用户发布的link // @page: 从1开始 func Link_ByUser(userId int64, page, pagesize int) []Link { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Limit = pagesize qi.Offset = page * pagesize qi.Where = "`user_id`=? and `status`=0" qi.Params = []interface{}{userId} qi.Order = "id desc" var links []Link err := db.GetStructs(&links, qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil } return links }
// 获取用户关注的话题列表 func User_GetFollowTopics(userId int64, page, pagesize int, order string) ([]Topic, error) { var db *goku.MysqlDB = GetDB() defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) qi := goku.SqlQueryInfo{} qi.Fields = "t.id, t.name, t.description, t.pic" qi.Join = " tf INNER JOIN `topic` t ON tf.topic_id=t.id" qi.Where = "tf.user_id=?" qi.Params = []interface{}{userId} qi.Limit = pagesize qi.Offset = pagesize * page if order == "" { qi.Order = "tf.create_time desc" //"t.id desc" } else { qi.Order = order } rows, err := db.Select("topic_follow", qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil, err } defer rows.Close() topics := make([]Topic, 0) for rows.Next() { topic := Topic{} err = rows.Scan(&topic.Id, &topic.Name, &topic.Description, &topic.Pic) if err != nil { goku.Logger().Errorln(err.Error()) return nil, err } topics = append(topics, topic) } return topics, nil }
// 获取属于某话题的link // @page: 从1开始 func Link_ForTopic(topicId int64, page, pagesize int, sortType string, t string) ([]Link, error) { var db *goku.MysqlDB = GetDB() db.Debug = true defer db.Close() page, pagesize = utils.PageCheck(page, pagesize) sortField := "tl.reddit_score DESC,tl.link_id DESC" tableName := "tui_link_for_topic_top" switch { case sortType == golink.ORDER_TYPE_HOTC: //热议 sortField = "l.comment_count DESC,tl.link_id DESC" tableName = "tui_link_for_topic_top" case sortType == golink.ORDER_TYPE_CTVL: //争议 sortField = "tl.vote_abs_score ASC,tl.vote_add_score DESC,tl.link_id DESC" tableName = "tui_link_for_topic_hot" case sortType == golink.ORDER_TYPE_TIME: //最新 sortField = "tl.link_id desc" tableName = "tui_link_for_topic_later" case sortType == golink.ORDER_TYPE_VOTE: //得分 sortField = "tl.vote DESC, tl.link_id DESC" tableName = "tui_link_for_topic_vote" default: //热门 sortField = "tl.reddit_score DESC,tl.link_id DESC" tableName = "tui_link_for_topic_top" } qi := goku.SqlQueryInfo{} qi.Fields = "l.id, l.user_id, l.title, l.context, l.topics, l.vote_up, l.vote_down, l.view_count, l.click_count, l.comment_count, l.create_time" qi.Join = " tl INNER JOIN `link` l ON tl.link_id=l.id" if sortType == golink.ORDER_TYPE_CTVL || sortType == golink.ORDER_TYPE_VOTE { qi.Where = "tl.topic_id=? AND tl.time_type=?" switch { case t == "all": //1:全部时间;2:这个小时;3:今天;4:这周;5:这个月;6:今年 qi.Params = []interface{}{topicId, 1} case t == "hour": qi.Params = []interface{}{topicId, 2} case t == "day": qi.Params = []interface{}{topicId, 3} case t == "week": qi.Params = []interface{}{topicId, 4} case t == "month": qi.Params = []interface{}{topicId, 5} case t == "year": qi.Params = []interface{}{topicId, 6} default: qi.Params = []interface{}{topicId, 1} } } else { qi.Where = "tl.topic_id=?" qi.Params = []interface{}{topicId} } qi.Limit = pagesize qi.Offset = pagesize * page qi.Order = sortField rows, err := db.Select(tableName, qi) if err != nil { goku.Logger().Errorln(err.Error()) return nil, err } defer rows.Close() links := make([]Link, 0) for rows.Next() { link := Link{} err = rows.Scan(&link.Id, &link.UserId, &link.Title, &link.Context, &link.Topics, &link.VoteUp, &link.VoteDown, &link.ViewCount, &link.ClickCount, &link.CommentCount, &link.CreateTime) if err != nil { goku.Logger().Errorln(err.Error()) return nil, err } links = append(links, link) } return links, nil }