From cdfcfaf262caf097a959cb730a91c0d9da6a0235 Mon Sep 17 00:00:00 2001 From: Michael Li Date: Mon, 18 Sep 2023 13:49:12 +0800 Subject: [PATCH 1/8] update docker-compose.yaml --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 9bfdb4ef..6082cab0 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -124,7 +124,7 @@ services: # - paopao-network backend: - image: bitbus/paopao-ce:nightly + image: bitbus/paopao-ce:0.5.0-alpha restart: always depends_on: - db From 65e3a436e0512fcc6e20f5686bb7dd79d1e96c3e Mon Sep 17 00:00:00 2001 From: Michael Li Date: Fri, 22 Sep 2023 20:23:36 +0800 Subject: [PATCH 2/8] just reduce little source code --- internal/conf/alipay.go | 8 ++++---- internal/service/metrics.go | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/internal/conf/alipay.go b/internal/conf/alipay.go index 4f118d64..8d1b8d0f 100644 --- a/internal/conf/alipay.go +++ b/internal/conf/alipay.go @@ -21,16 +21,16 @@ func MustAlipayClient() *alipay.Client { logrus.Fatalf("alipay.New err: %s", err) } // 加载应用公钥证书 - if err = client.LoadAppPublicCertFromFile(s.AppPublicCertFile); err != nil { - logrus.Fatalf("client.LoadAppPublicCertFromFile err: %s\n", err) + if err = client.LoadAppCertPublicKeyFromFile(s.AppPublicCertFile); err != nil { + logrus.Fatalf("client.LoadAppCertPublicKeyFromFile err: %s\n", err) } // 加载支付宝根证书 if err = client.LoadAliPayRootCertFromFile(s.RootCertFile); err != nil { logrus.Fatalf("client.LoadAliPayRootCertFromFile err: %s\n", err) } // 加载支付宝公钥证书 - if err = client.LoadAliPayPublicCertFromFile(s.PublicCertFile); err != nil { - logrus.Fatalf("client.LoadAliPayPublicCertFromFile err: %s\n", err) + if err = client.LoadAlipayCertPublicKeyFromFile(s.PublicCertFile); err != nil { + logrus.Fatalf("client.LoadAlipayCertPublicKeyFromFile err: %s\n", err) } _alipayClient = client }) diff --git a/internal/service/metrics.go b/internal/service/metrics.go index 74fdad6f..d83a5fd4 100644 --- a/internal/service/metrics.go +++ b/internal/service/metrics.go @@ -43,7 +43,6 @@ func (s *metricsService) String() string { func newMetricsService() Service { addr := conf.MetricsServerSetting.HttpIp + ":" + conf.MetricsServerSetting.HttpPort - // notice this step just to register pprof server to start. don't share server with pprof. server := httpServers.from(addr, func() *httpServer { ds, wc := dao.DataService(), cache.NewWebCache() mux := http.NewServeMux() From f6f6a919abf8cb603b20858b643214a8fc18fcae Mon Sep 17 00:00:00 2001 From: Michael Li Date: Sat, 23 Sep 2023 00:33:01 +0800 Subject: [PATCH 3/8] optimize comment rank score compute logic and some other optimize --- internal/conf/db.go | 2 + internal/conf/setting.go | 2 + internal/core/core.go | 3 - internal/core/cs/metrics.go | 18 +- internal/core/metrics.go | 14 +- internal/dao/cache/tweets.go | 2 +- internal/dao/jinzhu/comments.go | 66 ++- internal/dao/jinzhu/dbr/comment.go | 4 +- internal/dao/jinzhu/dbr/metrics.go | 50 ++- internal/dao/jinzhu/events.go | 49 +++ internal/dao/jinzhu/gorm.go | 4 + internal/dao/jinzhu/jinzhu.go | 6 +- internal/dao/jinzhu/metrics.go | 58 ++- .../mysql/0013_rank_metrics.down.sql | 3 + .../migration/mysql/0013_rank_metrics.up.sql | 48 +++ .../postgres/0012_rank_metrics.down.sql | 3 + .../postgres/0012_rank_metrics.up.sql | 51 +++ .../sqlite3/0013_rank_metrics.down.sql | 3 + .../sqlite3/0013_rank_metrics.up.sql | 62 +++ scripts/paopao-mysql.sql | 401 ++++++++++-------- scripts/paopao-postgres.sql | 31 +- scripts/paopao-sqlite3.sql | 51 +++ 22 files changed, 707 insertions(+), 224 deletions(-) create mode 100644 internal/dao/jinzhu/events.go create mode 100644 scripts/migration/mysql/0013_rank_metrics.down.sql create mode 100644 scripts/migration/mysql/0013_rank_metrics.up.sql create mode 100644 scripts/migration/postgres/0012_rank_metrics.down.sql create mode 100644 scripts/migration/postgres/0012_rank_metrics.up.sql create mode 100644 scripts/migration/sqlite3/0013_rank_metrics.down.sql create mode 100644 scripts/migration/sqlite3/0013_rank_metrics.up.sql diff --git a/internal/conf/db.go b/internal/conf/db.go index 90df9bd5..b7bb6727 100644 --- a/internal/conf/db.go +++ b/internal/conf/db.go @@ -23,6 +23,7 @@ const ( TableAttachment = "attachment" TableCaptcha = "captcha" TableComment = "comment" + TableCommentMetric = "comment_metric" TableCommentContent = "comment_content" TableCommentReply = "comment_reply" TableFollowing = "following" @@ -39,6 +40,7 @@ const ( TablePostStar = "post_star" TableTag = "tag" TableUser = "user" + TableUserMetric = "user_metric" TableWalletRecharge = "wallet_recharge" TableWalletStatement = "wallet_statement" ) diff --git a/internal/conf/setting.go b/internal/conf/setting.go index 4813e461..2edf9489 100644 --- a/internal/conf/setting.go +++ b/internal/conf/setting.go @@ -346,6 +346,7 @@ func (s *databaseConf) TableNames() (res TableNameMap) { TableAttachment, TableCaptcha, TableComment, + TableCommentMetric, TableCommentContent, TableCommentReply, TableFollowing, @@ -362,6 +363,7 @@ func (s *databaseConf) TableNames() (res TableNameMap) { TablePostStar, TableTag, TableUser, + TableUserMetric, TableWalletRecharge, TableWalletStatement, } diff --git a/internal/core/core.go b/internal/core/core.go index 18e07fe2..a74157d6 100644 --- a/internal/core/core.go +++ b/internal/core/core.go @@ -15,9 +15,6 @@ type DataService interface { // 话题服务 TopicService - // 广场泡泡服务 - // IndexPostsService - // 推文服务 TweetService TweetManageService diff --git a/internal/core/cs/metrics.go b/internal/core/cs/metrics.go index c8347dfa..f9808e46 100644 --- a/internal/core/cs/metrics.go +++ b/internal/core/cs/metrics.go @@ -13,8 +13,15 @@ type TweetMetric struct { UpvoteCount int64 CollectionCount int64 ShareCount int64 - ThumbdownCount int64 - ThumbupCount int64 + ThumbsUpCount int64 + ThumbsDownCount int64 +} + +type CommentMetric struct { + CommentId int64 + ReplyCount int32 + ThumbsUpCount int32 + ThumbsDownCount int32 } func (m *TweetMetric) RankScore(motivationFactor int) int64 { @@ -23,3 +30,10 @@ func (m *TweetMetric) RankScore(motivationFactor int) int64 { } return (m.CommentCount + m.UpvoteCount*2 + m.CollectionCount*4 + m.ShareCount*8) * int64(motivationFactor) } + +func (m *CommentMetric) RankScore(motivationFactor int) int64 { + if motivationFactor == 0 { + motivationFactor = 1 + } + return int64(m.ReplyCount*2+m.ThumbsUpCount*4-m.ThumbsDownCount) * int64(motivationFactor) +} diff --git a/internal/core/metrics.go b/internal/core/metrics.go index 790cee74..d2dbc0fb 100644 --- a/internal/core/metrics.go +++ b/internal/core/metrics.go @@ -9,7 +9,19 @@ import ( ) type TweetMetricServantA interface { - UpdateRankScore(metric *cs.TweetMetric) error + UpdateTweetMetric(metric *cs.TweetMetric) error AddTweetMetric(postId int64) error DeleteTweetMetric(postId int64) error } + +type CommentMetricServantA interface { + UpdateCommentMetric(metric *cs.CommentMetric) error + AddCommentMetric(commentId int64) error + DeleteCommentMetric(commentId int64) error +} + +type UserMetricServantA interface { + UpdateUserMetric(userId int64, action uint8) error + AddUserMetric(userId int64) error + DeleteUserMetric(userId int64) error +} diff --git a/internal/dao/cache/tweets.go b/internal/dao/cache/tweets.go index 8e239408..ecabf0bd 100644 --- a/internal/dao/cache/tweets.go +++ b/internal/dao/cache/tweets.go @@ -19,7 +19,7 @@ func (s *eventCacheIndexSrv) SendAction(act core.IdxAct, post *ms.Post) { err := error(nil) switch act { case core.IdxActUpdatePost: - err = s.tms.UpdateRankScore(&cs.TweetMetric{ + err = s.tms.UpdateTweetMetric(&cs.TweetMetric{ PostId: post.ID, CommentCount: post.CommentCount, UpvoteCount: post.UpvoteCount, diff --git a/internal/dao/jinzhu/comments.go b/internal/dao/jinzhu/comments.go index 23201be3..5614c00f 100644 --- a/internal/dao/jinzhu/comments.go +++ b/internal/dao/jinzhu/comments.go @@ -5,6 +5,7 @@ package jinzhu import ( + "fmt" "time" "github.com/rocboss/paopao-ce/internal/core" @@ -25,7 +26,8 @@ type commentSrv struct { } type commentManageSrv struct { - db *gorm.DB + db *gorm.DB + cms core.CommentMetricServantA } func newCommentService(db *gorm.DB) core.CommentService { @@ -34,9 +36,10 @@ func newCommentService(db *gorm.DB) core.CommentService { } } -func newCommentManageService(db *gorm.DB) core.CommentManageService { +func newCommentManageService(db *gorm.DB, cms core.CommentMetricServantA) core.CommentManageService { return &commentManageSrv{ - db: db, + db: db, + cms: cms, } } @@ -61,20 +64,21 @@ func (s *commentSrv) GetCommentThumbsMap(userId int64, tweetId int64) (cs.Commen } func (s *commentSrv) GetComments(tweetId int64, style cs.StyleCommentType, limit int, offset int) (res []*ms.Comment, total int64, err error) { - // TODO: 需要优化一下,更精细的调整评论排序策略 + db := s.db.Table(_comment_) sort := "is_essence DESC, id ASC" switch style { case cs.StyleCommentHots: - // TOOD: 暂时简单排序,后续需要根据 rank_score=评论回复数*2+点赞*4-点踩, order byrank_score DESC - sort = "is_essence DESC, thumbs_up_count DESC, id DESC" + // rank_score=评论回复数*2+点赞*4-点踩, order byrank_score DESC + db = db.Joins(fmt.Sprintf("LEFT JOIN %s m ON %s.id=m.comment_id AND m.is_del=0", _commentMetric_, _comment_)) + sort = "is_essence DESC, m.rank_score DESC, id DESC" case cs.StyleCommentNewest: sort = "is_essence DESC, id DESC" case cs.StyleCommentDefault: fallthrough default: - // sort = "id ASC" + // nothing } - db := s.db.Table(_comment_).Where("post_id=?", tweetId) + db = db.Where("post_id=?", tweetId) if err = db.Count(&total).Error; err != nil { return } @@ -117,11 +121,9 @@ func (s *commentSrv) GetCommentRepliesByID(ids []int64) ([]*ms.CommentReplyForma "comment_id IN ?": ids, "ORDER": "id ASC", }, 0, 0) - if err != nil { return nil, err } - userIds := []int64{} for _, reply := range replies { userIds = append(userIds, reply.UserID, reply.AtUserID) @@ -142,7 +144,6 @@ func (s *commentSrv) GetCommentRepliesByID(ids []int64) ([]*ms.CommentReplyForma replyFormated.AtUser = user.Format() } } - repliesFormated = append(repliesFormated, replyFormated) } @@ -166,37 +167,47 @@ func (s *commentManageSrv) HighlightComment(userId, commentId int64) (res int8, return comment.IsEssence, db.Save(comment).Error } -func (s *commentManageSrv) DeleteComment(comment *ms.Comment) error { +func (s *commentManageSrv) DeleteComment(comment *ms.Comment) (err error) { db := s.db.Begin() defer db.Rollback() - - err := comment.Delete(s.db) - if err != nil { - return err + if err = comment.Delete(db); err != nil { + return } err = db.Model(&dbr.TweetCommentThumbs{}).Where("user_id=? AND tweet_id=? AND comment_id=?", comment.UserID, comment.PostID, comment.ID).Updates(map[string]any{ "deleted_on": time.Now().Unix(), "is_del": 1, }).Error if err != nil { - return err + return } db.Commit() - return nil + if err == nil { + // 对错误宽松处理,暂时就不处理 + s.cms.DeleteCommentMetric(comment.ID) + } + return } -func (s *commentManageSrv) CreateComment(comment *ms.Comment) (*ms.Comment, error) { - return comment.Create(s.db) +func (s *commentManageSrv) CreateComment(comment *ms.Comment) (res *ms.Comment, err error) { + if res, err = comment.Create(s.db); err == nil { + // 对错误宽松处理,暂时就不处理 + s.cms.AddCommentMetric(res.ID) + } + return } -func (s *commentManageSrv) CreateCommentReply(reply *ms.CommentReply) (*ms.CommentReply, error) { - return reply.Create(s.db) +func (s *commentManageSrv) CreateCommentReply(reply *ms.CommentReply) (res *ms.CommentReply, err error) { + if res, err = reply.Create(s.db); err == nil { + // 宽松处理错误 + s.db.Table(_comment_).Where("id=?", reply.CommentID).Update("reply_count", gorm.Expr("reply_count+1")) + onUpdateCommentMetricEvent(reply.CommentID, s.db, s.cms) + } + return } func (s *commentManageSrv) DeleteCommentReply(reply *ms.CommentReply) (err error) { db := s.db.Begin() defer db.Rollback() - err = reply.Delete(s.db) if err != nil { return @@ -209,6 +220,9 @@ func (s *commentManageSrv) DeleteCommentReply(reply *ms.CommentReply) (err error if err != nil { return } + // 宽松处理错误 + db.Table(_comment_).Where("id=?", reply.CommentID).Update("reply_count", gorm.Expr("reply_count-1")) + onUpdateCommentMetricEvent(reply.CommentID, s.db, s.cms) db.Commit() return } @@ -263,6 +277,9 @@ func (s *commentManageSrv) ThumbsUpComment(userId int64, tweetId, commentId int6 return err } db.Commit() + if err == nil { + onUpdateCommentMetricEvent(commentId, s.db, s.cms) + } return nil } @@ -313,6 +330,9 @@ func (s *commentManageSrv) ThumbsDownComment(userId int64, tweetId, commentId in return err } db.Commit() + if err == nil { + onUpdateCommentMetricEvent(commentId, s.db, s.cms) + } return nil } diff --git a/internal/dao/jinzhu/dbr/comment.go b/internal/dao/jinzhu/dbr/comment.go index ed3a88f0..364253c4 100644 --- a/internal/dao/jinzhu/dbr/comment.go +++ b/internal/dao/jinzhu/dbr/comment.go @@ -18,6 +18,7 @@ type Comment struct { IP string `json:"ip"` IPLoc string `json:"ip_loc"` IsEssence int8 `json:"is_essense"` + ReplyCount int32 `json:"reply_count"` ThumbsUpCount int32 `json:"thumbs_up_count"` ThumbsDownCount int32 `json:"-"` } @@ -30,6 +31,7 @@ type CommentFormated struct { Contents []*CommentContent `json:"contents"` Replies []*CommentReplyFormated `json:"replies"` IPLoc string `json:"ip_loc"` + ReplyCount int32 `json:"reply_count"` ThumbsUpCount int32 `json:"thumbs_up_count"` IsEssence int8 `json:"is_essence"` IsThumbsUp int8 `json:"is_thumbs_up"` @@ -50,6 +52,7 @@ func (c *Comment) Format() *CommentFormated { Contents: []*CommentContent{}, Replies: []*CommentReplyFormated{}, IPLoc: c.IPLoc, + ReplyCount: c.ReplyCount, ThumbsUpCount: c.ThumbsUpCount, IsEssence: c.IsEssence, IsThumbsUp: types.No, @@ -119,7 +122,6 @@ func (c *Comment) Count(db *gorm.DB, conditions *ConditionsT) (int64, error) { func (c *Comment) Create(db *gorm.DB) (*Comment, error) { err := db.Create(&c).Error - return c, err } diff --git a/internal/dao/jinzhu/dbr/metrics.go b/internal/dao/jinzhu/dbr/metrics.go index 82e105eb..4210c701 100644 --- a/internal/dao/jinzhu/dbr/metrics.go +++ b/internal/dao/jinzhu/dbr/metrics.go @@ -19,13 +19,53 @@ type PostMetric struct { MotivationFactor int } -func (p *PostMetric) Create(db *gorm.DB) (*PostMetric, error) { - err := db.Create(&p).Error - return p, err +type CommentMetric struct { + *Model + CommentId int64 + RankScore int64 + IncentiveScore int + DecayFactor int + MotivationFactor int +} + +type UserMetric struct { + *Model + UserId int64 + TweetsCount int + LatestTrendsOn int64 +} + +func (m *PostMetric) Create(db *gorm.DB) (*PostMetric, error) { + err := db.Create(&m).Error + return m, err +} + +func (m *PostMetric) Delete(db *gorm.DB) error { + return db.Model(m).Where("post_id", m.PostId).Updates(map[string]any{ + "deleted_on": time.Now().Unix(), + "is_del": 1, + }).Error +} + +func (m *CommentMetric) Create(db *gorm.DB) (*CommentMetric, error) { + err := db.Create(&m).Error + return m, err +} + +func (m *CommentMetric) Delete(db *gorm.DB) error { + return db.Model(m).Where("comment_id", m.CommentId).Updates(map[string]any{ + "deleted_on": time.Now().Unix(), + "is_del": 1, + }).Error +} + +func (m *UserMetric) Create(db *gorm.DB) (*UserMetric, error) { + err := db.Create(&m).Error + return m, err } -func (p *PostMetric) Delete(db *gorm.DB) error { - return db.Model(p).Where("post_id", p.PostId).Updates(map[string]any{ +func (m *UserMetric) Delete(db *gorm.DB) error { + return db.Model(m).Where("user_id", m.UserId).Updates(map[string]any{ "deleted_on": time.Now().Unix(), "is_del": 1, }).Error diff --git a/internal/dao/jinzhu/events.go b/internal/dao/jinzhu/events.go new file mode 100644 index 00000000..25da7c8e --- /dev/null +++ b/internal/dao/jinzhu/events.go @@ -0,0 +1,49 @@ +// Copyright 2022 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package jinzhu + +import ( + "github.com/alimy/tryst/event" + "github.com/rocboss/paopao-ce/internal/core" + "github.com/rocboss/paopao-ce/internal/core/cs" + "github.com/rocboss/paopao-ce/internal/dao/jinzhu/dbr" + "github.com/rocboss/paopao-ce/internal/events" + "github.com/sirupsen/logrus" + "gorm.io/gorm" +) + +type updateCommentMetricEvent struct { + event.UnimplementedEvent + db *gorm.DB + cms core.CommentMetricServantA + commentId int64 +} + +func onUpdateCommentMetricEvent(commentId int64, db *gorm.DB, cms core.CommentMetricServantA) { + events.OnEvent(&updateCommentMetricEvent{ + db: db, + cms: cms, + commentId: commentId, + }) +} + +func (e *updateCommentMetricEvent) Name() string { + return "updateCommentMetricEvent" +} + +func (e *updateCommentMetricEvent) Action() (err error) { + logrus.Debugf("trigger updateCommentMetricEvent action commentId[%d]", e.commentId) + comment := dbr.Comment{} + if err = e.db.Table(_comment_).Where("id=?", e.commentId).First(&comment).Error; err != nil { + return + } + e.cms.UpdateCommentMetric(&cs.CommentMetric{ + CommentId: e.commentId, + ReplyCount: comment.ReplyCount, + ThumbsUpCount: comment.ThumbsUpCount, + ThumbsDownCount: comment.ThumbsDownCount, + }) + return +} diff --git a/internal/dao/jinzhu/gorm.go b/internal/dao/jinzhu/gorm.go index 7ba67927..4f50ef3f 100644 --- a/internal/dao/jinzhu/gorm.go +++ b/internal/dao/jinzhu/gorm.go @@ -15,6 +15,7 @@ var ( _attachment_ string _captcha_ string _comment_ string + _commentMetric_ string _commentContent_ string _commentReply_ string _following_ string @@ -31,6 +32,7 @@ var ( _postStar_ string _tag_ string _user_ string + _userMetric_ string _walletRecharge_ string _walletStatement_ string ) @@ -42,6 +44,7 @@ func initTableName() { _attachment_ = m[conf.TableAttachment] _captcha_ = m[conf.TableCaptcha] _comment_ = m[conf.TableComment] + _commentMetric_ = m[conf.TableCommentMetric] _commentContent_ = m[conf.TableCommentContent] _commentReply_ = m[conf.TableCommentReply] _following_ = m[conf.TableFollowing] @@ -58,6 +61,7 @@ func initTableName() { _postStar_ = m[conf.TablePostStar] _tag_ = m[conf.TableTag] _user_ = m[conf.TableUser] + _userMetric_ = m[conf.TableUserMetric] _walletRecharge_ = m[conf.TableWalletRecharge] _walletStatement_ = m[conf.TableWalletStatement] } diff --git a/internal/dao/jinzhu/jinzhu.go b/internal/dao/jinzhu/jinzhu.go index 8a9a224c..2e7c5460 100644 --- a/internal/dao/jinzhu/jinzhu.go +++ b/internal/dao/jinzhu/jinzhu.go @@ -38,6 +38,7 @@ type dataSrv struct { core.TweetMetricServantA core.CommentService core.CommentManageService + core.CommentMetricServantA core.UserManageService core.ContactManageService core.FollowingManageService @@ -57,7 +58,8 @@ func NewDataService() (core.DataService, core.VersionInfo) { lazyInitial() db := conf.MustGormDB() pvs := security.NewPhoneVerifyService() - tms := NewTweetMetricServentA(db) + tms := newTweetMetricServentA(db) + cms := newCommentMetricServentA(db) cis := cache.NewEventCacheIndexSrv(tms) ds := &dataSrv{ TweetMetricServantA: tms, @@ -68,7 +70,7 @@ func NewDataService() (core.DataService, core.VersionInfo) { TweetManageService: newTweetManageService(db, cis), TweetHelpService: newTweetHelpService(db), CommentService: newCommentService(db), - CommentManageService: newCommentManageService(db), + CommentManageService: newCommentManageService(db, cms), UserManageService: newUserManageService(db), ContactManageService: newContactManageService(db), FollowingManageService: newFollowingManageService(db), diff --git a/internal/dao/jinzhu/metrics.go b/internal/dao/jinzhu/metrics.go index a3d350b4..45e9f385 100644 --- a/internal/dao/jinzhu/metrics.go +++ b/internal/dao/jinzhu/metrics.go @@ -15,7 +15,15 @@ type tweetMetricSrvA struct { db *gorm.DB } -func (s *tweetMetricSrvA) UpdateRankScore(metric *cs.TweetMetric) error { +type commentMetricSrvA struct { + db *gorm.DB +} + +type userMetricSrvA struct { + db *gorm.DB +} + +func (s *tweetMetricSrvA) UpdateTweetMetric(metric *cs.TweetMetric) error { return s.db.Transaction(func(tx *gorm.DB) (err error) { postMetric := &dbr.PostMetric{PostId: metric.PostId} db := s.db.Model(postMetric).Where("post_id=?", metric.PostId) @@ -35,8 +43,54 @@ func (s *tweetMetricSrvA) DeleteTweetMetric(postId int64) (err error) { return (&dbr.PostMetric{PostId: postId}).Delete(s.db) } -func NewTweetMetricServentA(db *gorm.DB) core.TweetMetricServantA { +func (s *commentMetricSrvA) UpdateCommentMetric(metric *cs.CommentMetric) error { + return s.db.Transaction(func(tx *gorm.DB) (err error) { + commentMetric := &dbr.CommentMetric{CommentId: metric.CommentId} + db := s.db.Model(commentMetric).Where("comment_id=?", metric.CommentId) + db.First(commentMetric) + commentMetric.RankScore = metric.RankScore(commentMetric.MotivationFactor) + err = db.Save(commentMetric).Error + return + }) +} + +func (s *commentMetricSrvA) AddCommentMetric(commentId int64) (err error) { + _, err = (&dbr.CommentMetric{CommentId: commentId}).Create(s.db) + return +} + +func (s *commentMetricSrvA) DeleteCommentMetric(commentId int64) (err error) { + return (&dbr.CommentMetric{CommentId: commentId}).Delete(s.db) +} + +func (s *userMetricSrvA) UpdateUserMetric(userId int64, action uint8) error { + // TODO + return cs.ErrNotImplemented +} + +func (s *userMetricSrvA) AddUserMetric(userId int64) (err error) { + _, err = (&dbr.UserMetric{UserId: userId}).Create(s.db) + return +} + +func (s *userMetricSrvA) DeleteUserMetric(userId int64) (err error) { + return (&dbr.UserMetric{UserId: userId}).Delete(s.db) +} + +func newTweetMetricServentA(db *gorm.DB) core.TweetMetricServantA { return &tweetMetricSrvA{ db: db, } } + +func newCommentMetricServentA(db *gorm.DB) core.CommentMetricServantA { + return &commentMetricSrvA{ + db: db, + } +} + +func newUserMetricServentA(db *gorm.DB) core.UserMetricServantA { + return &userMetricSrvA{ + db: db, + } +} diff --git a/scripts/migration/mysql/0013_rank_metrics.down.sql b/scripts/migration/mysql/0013_rank_metrics.down.sql new file mode 100644 index 00000000..1e53dea4 --- /dev/null +++ b/scripts/migration/mysql/0013_rank_metrics.down.sql @@ -0,0 +1,3 @@ +ALTER TABLE `p_comment` DROP COLUMN `reply_count`; +DROP TABLE IF EXISTS `p_comment_metric`; +DROP TABLE IF EXISTS `p_user_metric`; diff --git a/scripts/migration/mysql/0013_rank_metrics.up.sql b/scripts/migration/mysql/0013_rank_metrics.up.sql new file mode 100644 index 00000000..63122be1 --- /dev/null +++ b/scripts/migration/mysql/0013_rank_metrics.up.sql @@ -0,0 +1,48 @@ +ALTER TABLE `p_comment` ADD COLUMN `reply_count` int unsigned NOT NULL DEFAULT 0 COMMENT '回复数'; + +UPDATE p_comment comment +SET reply_count = ( + SELECT count(*) FROM p_comment_reply reply WHERE reply.comment_id=comment.id AND reply.is_del=0 +) +WHERE is_del=0; + +CREATE TABLE `p_comment_metric` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `comment_id` bigint unsigned NOT NULL, + `rank_score` bigint unsigned NOT NULL DEFAULT 0, + `incentive_score` int unsigned NOT NULL DEFAULT 0, + `decay_factor` int unsigned NOT NULL DEFAULT 0, + `motivation_factor` int unsigned NOT NULL DEFAULT 0, + `is_del` tinyint NOT NULL DEFAULT 0, + `created_on` bigint unsigned NOT NULL DEFAULT 0, + `modified_on` bigint unsigned NOT NULL DEFAULT 0, + `deleted_on` bigint unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_comment_metric_comment_id_rank_score` (`comment_id`, `rank_score`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +INSERT INTO p_comment_metric (comment_id, rank_score, created_on) +SELECT id AS comment_id, + reply_count*2 + thumbs_up_count*4 - thumbs_down_count AS rank_score, + created_on +FROM p_comment +WHERE is_del=0; + +CREATE TABLE `p_user_metric` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `user_id` bigint unsigned NOT NULL, + `tweets_count` int unsigned NOT NULL DEFAULT 0, + `latest_trends_on` bigint unsigned NOT NULL DEFAULT 0 COMMENT '最新动态时间', + `is_del` tinyint NOT NULL DEFAULT 0, + `created_on` bigint unsigned NOT NULL DEFAULT 0, + `modified_on` bigint unsigned NOT NULL DEFAULT 0, + `deleted_on` bigint unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_user_metric_user_id_tweets_count_trends` (`user_id`, `tweets_count`, `latest_trends_on`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +INSERT INTO p_user_metric (user_id, tweets_count) +SELECT user_id, count(*) AS tweets_count +FROM p_post +WHERE is_del=0 +GROUP BY user_id; \ No newline at end of file diff --git a/scripts/migration/postgres/0012_rank_metrics.down.sql b/scripts/migration/postgres/0012_rank_metrics.down.sql new file mode 100644 index 00000000..e27369c4 --- /dev/null +++ b/scripts/migration/postgres/0012_rank_metrics.down.sql @@ -0,0 +1,3 @@ +ALTER TABLE p_comment DROP COLUMN IF EXISTS reply_count; +DROP TABLE IF EXISTS p_comment_metric; +DROP TABLE IF EXISTS p_user_metric; diff --git a/scripts/migration/postgres/0012_rank_metrics.up.sql b/scripts/migration/postgres/0012_rank_metrics.up.sql new file mode 100644 index 00000000..270c8330 --- /dev/null +++ b/scripts/migration/postgres/0012_rank_metrics.up.sql @@ -0,0 +1,51 @@ +ALTER TABLE p_comment ADD COLUMN reply_count INT NOT NULL DEFAULT 0; + +WITH comment_reply AS ( + SELECT comment_id, count(*) AS count + FROM p_comment_reply + WHERE is_del=0 + GROUP By comment_id +) +UPDATE p_comment comment +SET reply_count = reply.count +FROM comment_reply reply +WHERE comment.id = reply.comment_id; + +CREATE TABLE p_comment_metric ( + id BIGSERIAL PRIMARY KEY, + comment_id BIGINT NOT NULL, + rank_score BIGINT NOT NULL DEFAULT 0, + incentive_score INT NOT NULL DEFAULT 0, + decay_factor INT NOT NULL DEFAULT 0, + motivation_factor INT NOT NULL DEFAULT 0, + is_del SMALLINT NOT NULL DEFAULT 0, + created_on BIGINT NOT NULL DEFAULT 0, + modified_on BIGINT NOT NULL DEFAULT 0, + deleted_on BIGINT NOT NULL DEFAULT 0 +); +CREATE INDEX idx_comment_metric_comment_id_rank_score ON p_comment_metric USING btree (comment_id, rank_score); + +INSERT INTO p_comment_metric (comment_id, rank_score, created_on) +SELECT id AS comment_id, + reply_count*2 + thumbs_up_count*4 - thumbs_down_count AS rank_score, + created_on +FROM p_comment +WHERE is_del=0; + +CREATE TABLE p_user_metric ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + tweets_count INT NOT NULL DEFAULT 0, + latest_trends_on BIGINT NOT NULL DEFAULT 0, + is_del SMALLINT NOT NULL DEFAULT 0, + created_on BIGINT NOT NULL DEFAULT 0, + modified_on BIGINT NOT NULL DEFAULT 0, + deleted_on BIGINT NOT NULL DEFAULT 0 +); +CREATE INDEX idx_user_metric_user_id_tweets_count_trends ON p_user_metric USING btree (user_id, tweets_count, latest_trends_on); + +INSERT INTO p_user_metric (user_id, tweets_count) +SELECT user_id, count(*) AS tweets_count +FROM p_post +WHERE is_del=0 +GROUP BY user_id; diff --git a/scripts/migration/sqlite3/0013_rank_metrics.down.sql b/scripts/migration/sqlite3/0013_rank_metrics.down.sql new file mode 100644 index 00000000..48eb80d9 --- /dev/null +++ b/scripts/migration/sqlite3/0013_rank_metrics.down.sql @@ -0,0 +1,3 @@ +ALTER TABLE "p_comment" DROP COLUMN "reply_count"; +DROP TABLE IF EXISTS "p_comment_metric"; +DROP TABLE IF EXISTS "p_user_metric"; diff --git a/scripts/migration/sqlite3/0013_rank_metrics.up.sql b/scripts/migration/sqlite3/0013_rank_metrics.up.sql new file mode 100644 index 00000000..aa4d9c84 --- /dev/null +++ b/scripts/migration/sqlite3/0013_rank_metrics.up.sql @@ -0,0 +1,62 @@ +ALTER TABLE "p_comment" ADD COLUMN "reply_count" integer NOT NULL DEFAULT 0; + +UPDATE p_comment AS comment +SET reply_count = ( + SELECT count(*) + FROM + p_comment_reply AS reply + WHERE + comment.id=reply.comment_id AND comment.is_del=0 AND reply.is_del=0 +); + +CREATE TABLE p_comment_metric ( + "id" integer, + "comment_id" integer NOT NULL, + "rank_score" integer NOT NULL DEFAULT 0, + "incentive_score" integer NOT NULL DEFAULT 0, + "decay_factor" integer NOT NULL DEFAULT 0, + "motivation_factor" integer NOT NULL DEFAULT 0, + "is_del" integer NOT NULL DEFAULT 0, + "created_on" integer NOT NULL DEFAULT 0, + "modified_on" integer NOT NULL DEFAULT 0, + "deleted_on" integer NOT NULL DEFAULT 0, + PRIMARY KEY ("id") +); + +CREATE INDEX "idx_comment_metric_comment_id_rank_score" +ON "p_comment_metric" ( + "comment_id" ASC, + "rank_score" ASC +); + +INSERT INTO p_comment_metric (comment_id, rank_score, created_on) +SELECT id AS comment_id, + reply_count*2 + thumbs_up_count*4 - thumbs_down_count AS rank_score, + created_on +FROM p_comment +WHERE is_del=0; + +CREATE TABLE "p_user_metric" ( + "id" integer, + "user_id" integer NOT NULL, + "tweets_count" integer NOT NULL DEFAULT 0, + "latest_trends_on" integer NOT NULL DEFAULT 0, + "is_del" integer NOT NULL DEFAULT 0, + "created_on" integer NOT NULL DEFAULT 0, + "modified_on" integer NOT NULL DEFAULT 0, + "deleted_on" integer NOT NULL DEFAULT 0, + PRIMARY KEY ("id") +); + +CREATE INDEX "idx_user_metric_user_id_tweets_count_trends" +ON "p_user_metric" ( + "user_id" ASC, + "tweets_count" ASC, + "latest_trends_on" ASC +); + +INSERT INTO p_user_metric (user_id, tweets_count) +SELECT user_id, count(*) AS tweets_count +FROM p_post +WHERE is_del=0 +GROUP BY user_id; diff --git a/scripts/paopao-mysql.sql b/scripts/paopao-mysql.sql index 5d354bcb..041eac2d 100644 --- a/scripts/paopao-mysql.sql +++ b/scripts/paopao-mysql.sql @@ -6,17 +6,17 @@ SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- DROP TABLE IF EXISTS `p_attachment`; CREATE TABLE `p_attachment` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `user_id` bigint unsigned NOT NULL DEFAULT '0', - `file_size` bigint unsigned NOT NULL, - `img_width` bigint unsigned NOT NULL DEFAULT '0', - `img_height` bigint unsigned NOT NULL DEFAULT '0', - `type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '1图片,2视频,3其他附件', + `id` BIGINT NOT NULL AUTO_INCREMENT, + `user_id` BIGINT NOT NULL DEFAULT '0', + `file_size` BIGINT NOT NULL, + `img_width` BIGINT NOT NULL DEFAULT '0', + `img_height` BIGINT NOT NULL DEFAULT '0', + `type` tinyint NOT NULL DEFAULT '1' COMMENT '1图片,2视频,3其他附件', `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_attachment_user` (`user_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=100041 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='附件'; @@ -26,15 +26,15 @@ CREATE TABLE `p_attachment` ( -- ---------------------------- DROP TABLE IF EXISTS `p_captcha`; CREATE TABLE `p_captcha` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '验证码ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '验证码ID', `phone` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号', `captcha` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '验证码', - `use_times` int unsigned NOT NULL DEFAULT '0' COMMENT '使用次数', - `expired_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '过期时间', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `use_times` int NOT NULL DEFAULT '0' COMMENT '使用次数', + `expired_on` BIGINT NOT NULL DEFAULT '0' COMMENT '过期时间', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_captcha_phone` (`phone`) USING BTREE, KEY `idx_captcha_expired_on` (`expired_on`) USING BTREE, @@ -46,18 +46,19 @@ CREATE TABLE `p_captcha` ( -- ---------------------------- DROP TABLE IF EXISTS `p_comment`; CREATE TABLE `p_comment` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '评论ID', - `post_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT 'POST ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '评论ID', + `post_id` BIGINT NOT NULL DEFAULT '0' COMMENT 'POST ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', `ip` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'IP地址', `ip_loc` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'IP城市地址', - `is_essence` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '是否精选', - `thumbs_up_count` int unsigned NOT NULL DEFAULT '0' COMMENT '点赞数', - `thumbs_down_count` int unsigned NOT NULL DEFAULT '0' COMMENT '点踩数', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `is_essence` tinyint NOT NULL DEFAULT 0 COMMENT '是否精选', + `reply_count` int NOT NULL DEFAULT 0 COMMENT '回复数', + `thumbs_up_count` int NOT NULL DEFAULT 0 COMMENT '点赞数', + `thumbs_down_count` int NOT NULL DEFAULT 0 COMMENT '点踩数', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_comment_post_id` (`post_id`) USING BTREE, KEY `idx_comment_user_id` (`user_id`) USING BTREE @@ -68,16 +69,16 @@ CREATE TABLE `p_comment` ( -- ---------------------------- DROP TABLE IF EXISTS `p_comment_content`; CREATE TABLE `p_comment_content` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '内容ID', - `comment_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '评论ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '内容ID', + `comment_id` BIGINT NOT NULL DEFAULT '0' COMMENT '评论ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', `content` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '内容', - `type` tinyint unsigned NOT NULL DEFAULT '2' COMMENT '类型,1标题,2文字段落,3图片地址,4视频地址,5语音地址,6链接地址', - `sort` bigint unsigned NOT NULL DEFAULT '100' COMMENT '排序,越小越靠前', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `type` tinyint NOT NULL DEFAULT '2' COMMENT '类型,1标题,2文字段落,3图片地址,4视频地址,5语音地址,6链接地址', + `sort` BIGINT NOT NULL DEFAULT '100' COMMENT '排序,越小越靠前', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_comment_content_comment_id` (`comment_id`) USING BTREE, KEY `idx_comment_content_user_id` (`user_id`) USING BTREE, @@ -90,40 +91,59 @@ CREATE TABLE `p_comment_content` ( -- ---------------------------- DROP TABLE IF EXISTS `p_comment_reply`; CREATE TABLE `p_comment_reply` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '回复ID', - `comment_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '评论ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', - `at_user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '@用户ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '回复ID', + `comment_id` BIGINT NOT NULL DEFAULT '0' COMMENT '评论ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', + `at_user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '@用户ID', `content` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '内容', `ip` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'IP地址', `ip_loc` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'IP城市地址', - `thumbs_up_count` int unsigned NOT NULL DEFAULT '0' COMMENT '点赞数', - `thumbs_down_count` int unsigned NOT NULL DEFAULT '0' COMMENT '点踩数', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `thumbs_up_count` int NOT NULL DEFAULT '0' COMMENT '点赞数', + `thumbs_down_count` int NOT NULL DEFAULT '0' COMMENT '点踩数', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_comment_reply_comment_id` (`comment_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=12000015 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='评论回复'; +-- ---------------------------- +-- Table structure for p_comment_metric +-- ---------------------------- +DROP TABLE IF EXISTS `p_comment_metric`; +CREATE TABLE `p_comment_metric` ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `comment_id` BIGINT NOT NULL, + `rank_score` BIGINT NOT NULL DEFAULT 0, + `incentive_score` int NOT NULL DEFAULT 0, + `decay_factor` int NOT NULL DEFAULT 0, + `motivation_factor` int NOT NULL DEFAULT 0, + `is_del` tinyint NOT NULL DEFAULT 0, + `created_on` BIGINT NOT NULL DEFAULT 0, + `modified_on` BIGINT NOT NULL DEFAULT 0, + `deleted_on` BIGINT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_comment_metric_comment_id_rank_score` (`comment_id`, `rank_score`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + -- ---------------------------- -- Table structure for p_tweet_comment_thumbs -- ---------------------------- DROP TABLE IF EXISTS `p_tweet_comment_thumbs`; CREATE TABLE `p_tweet_comment_thumbs` ( - `id` BIGINT unsigned NOT NULL AUTO_INCREMENT COMMENT 'thumbs ID', - `user_id` BIGINT unsigned NOT NULL, - `tweet_id` BIGINT unsigned NOT NULL COMMENT '推文ID', - `comment_id` BIGINT unsigned NOT NULL COMMENT '评论ID', - `reply_id` BIGINT unsigned COMMENT '评论回复ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'thumbs ID', + `user_id` BIGINT NOT NULL, + `tweet_id` BIGINT NOT NULL COMMENT '推文ID', + `comment_id` BIGINT NOT NULL COMMENT '评论ID', + `reply_id` BIGINT COMMENT '评论回复ID', `comment_type` TINYINT NOT NULL DEFAULT '0' COMMENT '评论类型 0为推文评论、1为评论回复', - `is_thumbs_up` TINYINT unsigned NOT NULL DEFAULT '0' COMMENT '是否点赞', - `is_thumbs_down` TINYINT unsigned NOT NULL DEFAULT '0' COMMENT '是否点踩', - `created_on` BIGINT unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` BIGINT unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` BIGINT unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` TINYINT unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `is_thumbs_up` TINYINT NOT NULL DEFAULT '0' COMMENT '是否点赞', + `is_thumbs_down` TINYINT NOT NULL DEFAULT '0' COMMENT '是否点踩', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` TINYINT NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_tweet_comment_thumbs_uid_tid` (`user_id`, `tweet_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='推文评论点赞'; @@ -133,20 +153,20 @@ CREATE TABLE `p_tweet_comment_thumbs` ( -- ---------------------------- DROP TABLE IF EXISTS `p_message`; CREATE TABLE `p_message` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '消息通知ID', - `sender_user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '发送方用户ID', - `receiver_user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '接收方用户ID', - `type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '通知类型,1动态,2评论,3回复,4私信,99系统通知', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '消息通知ID', + `sender_user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '发送方用户ID', + `receiver_user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '接收方用户ID', + `type` tinyint NOT NULL DEFAULT '1' COMMENT '通知类型,1动态,2评论,3回复,4私信,99系统通知', `brief` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '摘要说明', `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '详细内容', - `post_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '动态ID', - `comment_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '评论ID', - `reply_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '回复ID', - `is_read` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否已读', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `post_id` BIGINT NOT NULL DEFAULT '0' COMMENT '动态ID', + `comment_id` BIGINT NOT NULL DEFAULT '0' COMMENT '评论ID', + `reply_id` BIGINT NOT NULL DEFAULT '0' COMMENT '回复ID', + `is_read` tinyint NOT NULL DEFAULT '0' COMMENT '是否已读', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_message_receiver_user_id` (`receiver_user_id`) USING BTREE, KEY `idx_message_is_read` (`is_read`) USING BTREE, @@ -158,25 +178,25 @@ CREATE TABLE `p_message` ( -- ---------------------------- DROP TABLE IF EXISTS `p_post`; CREATE TABLE `p_post` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主题ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', - `comment_count` bigint unsigned NOT NULL DEFAULT '0' COMMENT '评论数', - `collection_count` bigint unsigned NOT NULL DEFAULT '0' COMMENT '收藏数', - `upvote_count` bigint unsigned NOT NULL DEFAULT '0' COMMENT '点赞数', - `share_count` bigint unsigned NOT NULL DEFAULT '0' COMMENT '分享数', - `visibility` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '可见性: 0私密 10充电可见 20订阅可见 30保留 40保留 50好友可见 60关注可见 70保留 80保留 90公开', - `is_top` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否置顶', - `is_essence` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否精华', - `is_lock` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否锁定', - `latest_replied_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '最新回复时间', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主题ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', + `comment_count` BIGINT NOT NULL DEFAULT '0' COMMENT '评论数', + `collection_count` BIGINT NOT NULL DEFAULT '0' COMMENT '收藏数', + `upvote_count` BIGINT NOT NULL DEFAULT '0' COMMENT '点赞数', + `share_count` BIGINT NOT NULL DEFAULT '0' COMMENT '分享数', + `visibility` tinyint NOT NULL DEFAULT '0' COMMENT '可见性: 0私密 10充电可见 20订阅可见 30保留 40保留 50好友可见 60关注可见 70保留 80保留 90公开', + `is_top` tinyint NOT NULL DEFAULT '0' COMMENT '是否置顶', + `is_essence` tinyint NOT NULL DEFAULT '0' COMMENT '是否精华', + `is_lock` tinyint NOT NULL DEFAULT '0' COMMENT '是否锁定', + `latest_replied_on` BIGINT NOT NULL DEFAULT '0' COMMENT '最新回复时间', `tags` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签', - `attachment_price` bigint unsigned NOT NULL DEFAULT '0' COMMENT '附件价格(分)', + `attachment_price` BIGINT NOT NULL DEFAULT '0' COMMENT '附件价格(分)', `ip` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'IP地址', `ip_loc` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'IP城市地址', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_post_user_id` (`user_id`) USING BTREE, KEY `idx_post_visibility` (`visibility`) USING BTREE @@ -187,16 +207,16 @@ CREATE TABLE `p_post` ( -- ---------------------------- DROP TABLE IF EXISTS `p_post_metric`; CREATE TABLE `p_post_metric` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `post_id` bigint unsigned NOT NULL, - `rank_score` bigint unsigned NOT NULL DEFAULT 0, - `incentive_score` int unsigned NOT NULL DEFAULT 0, - `decay_factor` int unsigned NOT NULL DEFAULT 0, - `motivation_factor` int unsigned NOT NULL DEFAULT 0, + `id` BIGINT NOT NULL AUTO_INCREMENT, + `post_id` BIGINT NOT NULL, + `rank_score` BIGINT NOT NULL DEFAULT 0, + `incentive_score` int NOT NULL DEFAULT 0, + `decay_factor` int NOT NULL DEFAULT 0, + `motivation_factor` int NOT NULL DEFAULT 0, `is_del` tinyint NOT NULL DEFAULT 0, -- 是否删除, 0否, 1是 - `created_on` bigint unsigned NOT NULL DEFAULT '0', - `modified_on` bigint unsigned NOT NULL DEFAULT '0', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0', + `created_on` BIGINT NOT NULL DEFAULT '0', + `modified_on` BIGINT NOT NULL DEFAULT '0', + `deleted_on` BIGINT NOT NULL DEFAULT '0', PRIMARY KEY (`id`) USING BTREE, KEY `idx_post_metric_post_id_rank_score` (`post_id`,`rank_score`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -206,14 +226,14 @@ CREATE TABLE `p_post_metric` ( -- ---------------------------- DROP TABLE IF EXISTS `p_post_attachment_bill`; CREATE TABLE `p_post_attachment_bill` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '购买记录ID', - `post_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT 'POST ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', - `paid_amount` bigint unsigned NOT NULL DEFAULT '0' COMMENT '支付金额', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '购买记录ID', + `post_id` BIGINT NOT NULL DEFAULT '0' COMMENT 'POST ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', + `paid_amount` BIGINT NOT NULL DEFAULT '0' COMMENT '支付金额', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_post_attachment_bill_post_id` (`post_id`) USING BTREE, KEY `idx_post_attachment_bill_user_id` (`user_id`) USING BTREE @@ -224,13 +244,13 @@ CREATE TABLE `p_post_attachment_bill` ( -- ---------------------------- DROP TABLE IF EXISTS `p_post_collection`; CREATE TABLE `p_post_collection` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '收藏ID', - `post_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT 'POST ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '收藏ID', + `post_id` BIGINT NOT NULL DEFAULT '0' COMMENT 'POST ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_post_collection_post_id` (`post_id`) USING BTREE, KEY `idx_post_collection_user_id` (`user_id`) USING BTREE @@ -241,16 +261,16 @@ CREATE TABLE `p_post_collection` ( -- ---------------------------- DROP TABLE IF EXISTS `p_post_content`; CREATE TABLE `p_post_content` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '内容ID', - `post_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT 'POST ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '内容ID', + `post_id` BIGINT NOT NULL DEFAULT '0' COMMENT 'POST ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', `content` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '内容', - `type` tinyint unsigned NOT NULL DEFAULT '2' COMMENT '类型,1标题,2文字段落,3图片地址,4视频地址,5语音地址,6链接地址,7附件资源,8收费资源', - `sort` int unsigned NOT NULL DEFAULT '100' COMMENT '排序,越小越靠前', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `type` tinyint NOT NULL DEFAULT '2' COMMENT '类型,1标题,2文字段落,3图片地址,4视频地址,5语音地址,6链接地址,7附件资源,8收费资源', + `sort` int NOT NULL DEFAULT '100' COMMENT '排序,越小越靠前', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_post_content_post_id` (`post_id`) USING BTREE, KEY `idx_post_content_user_id` (`user_id`) USING BTREE @@ -261,13 +281,13 @@ CREATE TABLE `p_post_content` ( -- ---------------------------- DROP TABLE IF EXISTS `p_post_star`; CREATE TABLE `p_post_star` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '收藏ID', - `post_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT 'POST ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '收藏ID', + `post_id` BIGINT NOT NULL DEFAULT '0' COMMENT 'POST ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_post_star_post_id` (`post_id`) USING BTREE, KEY `idx_post_star_user_id` (`user_id`) USING BTREE @@ -278,14 +298,14 @@ CREATE TABLE `p_post_star` ( -- ---------------------------- DROP TABLE IF EXISTS `p_tag`; CREATE TABLE `p_tag` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '标签ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建者ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '标签ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '创建者ID', `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标签名', - `quote_num` bigint unsigned NOT NULL DEFAULT '0' COMMENT '引用数', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `quote_num` BIGINT NOT NULL DEFAULT '0' COMMENT '引用数', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_tag_tag` (`tag`) USING BTREE, KEY `idx_tag_user_id` (`user_id`) USING BTREE, @@ -297,17 +317,17 @@ CREATE TABLE `p_tag` ( -- ---------------------------- DROP TABLE IF EXISTS `p_topic_user`; CREATE TABLE `p_topic_user` ( - `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, - `topic_id` BIGINT UNSIGNED NOT NULL COMMENT '标签ID', - `user_id` BIGINT UNSIGNED NOT NULL COMMENT '创建者ID', + `id` BIGINT NOT NULL AUTO_INCREMENT, + `topic_id` BIGINT NOT NULL COMMENT '标签ID', + `user_id` BIGINT NOT NULL COMMENT '创建者ID', `alias_name` VARCHAR ( 255 ) COMMENT '别名', `remark` VARCHAR ( 512 ) COMMENT '备注', - `quote_num` BIGINT UNSIGNED COMMENT '引用数', - `is_top` TINYINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否置顶 0 为未置顶、1 为已置顶', - `created_on` BIGINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` BIGINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` BIGINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` TINYINT UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `quote_num` BIGINT COMMENT '引用数', + `is_top` TINYINT NOT NULL DEFAULT '0' COMMENT '是否置顶 0 为未置顶、1 为已置顶', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` TINYINT NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', `reserve_a` VARCHAR ( 255 ) COMMENT '保留字段a', `reserve_b` VARCHAR ( 255 ) COMMENT '保留字段b', PRIMARY KEY ( `id` ) USING BTREE, @@ -319,37 +339,54 @@ CREATE TABLE `p_topic_user` ( -- ---------------------------- DROP TABLE IF EXISTS `p_user`; CREATE TABLE `p_user` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID', `nickname` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '昵称', `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户名', `phone` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号', `password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'MD5密码', `salt` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '盐值', - `status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '状态,1正常,2停用', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态,1正常,2停用', `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户头像', - `balance` bigint unsigned NOT NULL COMMENT '用户余额(分)', - `is_admin` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否管理员', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `balance` BIGINT NOT NULL COMMENT '用户余额(分)', + `is_admin` tinyint NOT NULL DEFAULT '0' COMMENT '是否管理员', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_user_username` (`username`) USING BTREE, KEY `idx_user_phone` (`phone`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=100058 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户'; +-- ---------------------------- +-- Table structure for p_user_metric +-- ---------------------------- +DROP TABLE IF EXISTS `p_user_metric`; +CREATE TABLE `p_user_metric` ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `user_id` BIGINT NOT NULL, + `tweets_count` int NOT NULL DEFAULT 0, + `latest_trends_on` BIGINT NOT NULL DEFAULT 0 COMMENT '最新动态时间', + `is_del` tinyint NOT NULL DEFAULT 0, + `created_on` BIGINT NOT NULL DEFAULT 0, + `modified_on` BIGINT NOT NULL DEFAULT 0, + `deleted_on` BIGINT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_user_metric_user_id_tweets_count_trends` (`user_id`, `tweets_count`, `latest_trends_on`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + -- ---------------------------- -- Table structure for p_following -- ---------------------------- DROP TABLE IF EXISTS `p_following`; CREATE TABLE `p_following` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `user_id` bigint unsigned NOT NULL, - `follow_id` bigint unsigned NOT NULL, + `id` BIGINT NOT NULL AUTO_INCREMENT, + `user_id` BIGINT NOT NULL, + `follow_id` BIGINT NOT NULL, `is_del` tinyint NOT NULL DEFAULT 0, -- 是否删除, 0否, 1是 - `created_on` bigint unsigned NOT NULL DEFAULT '0', - `modified_on` bigint unsigned NOT NULL DEFAULT '0', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0', + `created_on` BIGINT NOT NULL DEFAULT '0', + `modified_on` BIGINT NOT NULL DEFAULT '0', + `deleted_on` BIGINT NOT NULL DEFAULT '0', PRIMARY KEY (`id`) USING BTREE, KEY `idx_following_user_follow` (`user_id`,`follow_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -359,19 +396,19 @@ CREATE TABLE `p_following` ( -- ---------------------------- DROP TABLE IF EXISTS `p_contact`; CREATE TABLE `p_contact` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '联系人ID', - `user_id` bigint unsigned NOT NULL COMMENT '用户ID', - `friend_id` bigint unsigned NOT NULL COMMENT '好友ID', - `group_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '好友分组ID:默认为0无分组', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '联系人ID', + `user_id` BIGINT NOT NULL COMMENT '用户ID', + `friend_id` BIGINT NOT NULL COMMENT '好友ID', + `group_id` BIGINT NOT NULL DEFAULT '0' COMMENT '好友分组ID:默认为0无分组', `remark` varchar(32) NOT NULL DEFAULT '' COMMENT '好友备注', `status` tinyint NOT NULL DEFAULT '0' COMMENT '好友状态: 1请求好友, 2已好友, 3拒绝好友, 4已删好友', `is_top` tinyint NOT NULL DEFAULT '0' COMMENT '是否置顶, 0否, 1是', `is_black` tinyint NOT NULL DEFAULT '0' COMMENT '是否为黑名单, 0否, 1是', `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除好友, 0否, 1是', `notice_enable` tinyint NOT NULL DEFAULT '0' COMMENT '是否有消息提醒, 0否, 1是', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_contact_user_friend` (`user_id`,`friend_id`) USING BTREE, KEY `idx_contact_user_friend_status` (`user_id`, `friend_id`, `status`) USING BTREE @@ -382,13 +419,13 @@ CREATE TABLE `p_contact` ( -- ---------------------------- DROP TABLE IF EXISTS `p_contact_group`; CREATE TABLE `p_contact_group` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '联系人ID', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '联系人ID', `user_id` int NOT NULL DEFAULT '0' COMMENT '用户id', `name` varchar(32) NOT NULL DEFAULT '' COMMENT '分组名称', `is_del` tinyint NOT NULL DEFAULT '1' COMMENT '是否删除, 0否, 1是', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='联系人分组'; @@ -397,15 +434,15 @@ CREATE TABLE `p_contact_group` ( -- ---------------------------- DROP TABLE IF EXISTS `p_wallet_recharge`; CREATE TABLE `p_wallet_recharge` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '充值ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', - `amount` bigint NOT NULL DEFAULT '0' COMMENT '充值金额', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '充值ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', + `amount` BIGINT NOT NULL DEFAULT '0' COMMENT '充值金额', `trade_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '支付宝订单号', `trade_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '交易状态', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_wallet_recharge_user_id` (`user_id`) USING BTREE, KEY `idx_wallet_recharge_trade_no` (`trade_no`) USING BTREE, @@ -417,16 +454,16 @@ CREATE TABLE `p_wallet_recharge` ( -- ---------------------------- DROP TABLE IF EXISTS `p_wallet_statement`; CREATE TABLE `p_wallet_statement` ( - `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '账单ID', - `user_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', - `change_amount` bigint NOT NULL DEFAULT '0' COMMENT '变动金额', - `balance_snapshot` bigint NOT NULL DEFAULT '0' COMMENT '资金快照', + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '账单ID', + `user_id` BIGINT NOT NULL DEFAULT '0' COMMENT '用户ID', + `change_amount` BIGINT NOT NULL DEFAULT '0' COMMENT '变动金额', + `balance_snapshot` BIGINT NOT NULL DEFAULT '0' COMMENT '资金快照', `reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '变动原因', - `post_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '关联动态', - `created_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', - `modified_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', - `deleted_on` bigint unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', - `is_del` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', + `post_id` BIGINT NOT NULL DEFAULT '0' COMMENT '关联动态', + `created_on` BIGINT NOT NULL DEFAULT '0' COMMENT '创建时间', + `modified_on` BIGINT NOT NULL DEFAULT '0' COMMENT '修改时间', + `deleted_on` BIGINT NOT NULL DEFAULT '0' COMMENT '删除时间', + `is_del` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0 为未删除、1 为已删除', PRIMARY KEY (`id`) USING BTREE, KEY `idx_wallet_statement_user_id` (`user_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=10010 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='钱包流水'; diff --git a/scripts/paopao-postgres.sql b/scripts/paopao-postgres.sql index 26c854e4..34736ce4 100644 --- a/scripts/paopao-postgres.sql +++ b/scripts/paopao-postgres.sql @@ -44,8 +44,9 @@ CREATE TABLE p_comment ( ip VARCHAR(64) NOT NULL DEFAULT '', ip_loc VARCHAR(64) NOT NULL DEFAULT '', is_essence SMALLINT NOT NULL DEFAULT 0, - thumbs_up_count int NOT NULL DEFAULT 0, -- 点赞数 - thumbs_down_count int NOT NULL DEFAULT 0, -- 点踩数 + reply_count INT NOT NULL DEFAULT 0, -- 回复数 + thumbs_up_count INT NOT NULL DEFAULT 0, -- 点赞数 + thumbs_down_count INT NOT NULL DEFAULT 0, -- 点踩数 created_on BIGINT NOT NULL DEFAULT 0, modified_on BIGINT NOT NULL DEFAULT 0, deleted_on BIGINT NOT NULL DEFAULT 0, @@ -90,6 +91,20 @@ CREATE TABLE p_comment_reply ( ); CREATE INDEX idx_comment_reply_comment_id ON p_comment_reply USING btree (comment_id); +CREATE TABLE p_comment_metric ( + id BIGSERIAL PRIMARY KEY, + comment_id BIGINT NOT NULL, + rank_score BIGINT NOT NULL DEFAULT 0, + incentive_score INT NOT NULL DEFAULT 0, + decay_factor INT NOT NULL DEFAULT 0, + motivation_factor INT NOT NULL DEFAULT 0, + is_del SMALLINT NOT NULL DEFAULT 0, + created_on BIGINT NOT NULL DEFAULT 0, + modified_on BIGINT NOT NULL DEFAULT 0, + deleted_on BIGINT NOT NULL DEFAULT 0 +); +CREATE INDEX idx_comment_metric_comment_id_rank_score ON p_comment_metric USING btree (comment_id, rank_score); + DROP TABLE IF EXISTS p_tweet_comment_thumbs; CREATE TABLE p_tweet_comment_thumbs ( id BIGSERIAL PRIMARY KEY, @@ -281,6 +296,18 @@ CREATE TABLE p_user ( CREATE UNIQUE INDEX idx_user_username ON p_user USING btree (username); CREATE INDEX idx_user_phone ON p_user USING btree (phone); +CREATE TABLE p_user_metric ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + tweets_count INT NOT NULL DEFAULT 0, + latest_trends_on BIGINT NOT NULL DEFAULT 0, + is_del SMALLINT NOT NULL DEFAULT 0, + created_on BIGINT NOT NULL DEFAULT 0, + modified_on BIGINT NOT NULL DEFAULT 0, + deleted_on BIGINT NOT NULL DEFAULT 0 +); +CREATE INDEX idx_user_metric_user_id_tweets_count_trends ON p_user_metric USING btree (user_id, tweets_count, latest_trends_on); + DROP TABLE IF EXISTS p_following; CREATE TABLE p_following ( id BIGSERIAL PRIMARY KEY, diff --git a/scripts/paopao-sqlite3.sql b/scripts/paopao-sqlite3.sql index e74372f6..49fd68c0 100644 --- a/scripts/paopao-sqlite3.sql +++ b/scripts/paopao-sqlite3.sql @@ -95,6 +95,23 @@ CREATE TABLE "p_comment_reply" ( PRIMARY KEY ("id") ); +-- ---------------------------- +-- Table structure for p_comment_metric +-- ---------------------------- +CREATE TABLE p_comment_metric ( + "id" integer, + "comment_id" integer NOT NULL, + "rank_score" integer NOT NULL DEFAULT 0, + "incentive_score" integer NOT NULL DEFAULT 0, + "decay_factor" integer NOT NULL DEFAULT 0, + "motivation_factor" integer NOT NULL DEFAULT 0, + "is_del" integer NOT NULL DEFAULT 0, + "created_on" integer NOT NULL DEFAULT 0, + "modified_on" integer NOT NULL DEFAULT 0, + "deleted_on" integer NOT NULL DEFAULT 0, + PRIMARY KEY ("id") +); + -- ---------------------------- -- Table structure for p_tweet_comment_thumbs -- ---------------------------- @@ -355,6 +372,21 @@ CREATE TABLE "p_user" ( PRIMARY KEY ("id") ); +-- ---------------------------- +-- Table structure for p_user_metric +-- ---------------------------- +CREATE TABLE "p_user_metric" ( + "id" integer, + "user_id" integer NOT NULL, + "tweets_count" integer NOT NULL DEFAULT 0, + "latest_trends_on" integer NOT NULL DEFAULT 0, + "is_del" integer NOT NULL DEFAULT 0, + "created_on" integer NOT NULL DEFAULT 0, + "modified_on" integer NOT NULL DEFAULT 0, + "deleted_on" integer NOT NULL DEFAULT 0, + PRIMARY KEY ("id") +); + -- ---------------------------- -- Table structure for p_wallet_recharge -- ---------------------------- @@ -489,6 +521,15 @@ ON "p_comment_reply" ( "comment_id" ASC ); +-- ---------------------------- +-- Indexes structure for table p_comment_metric +-- ---------------------------- +CREATE INDEX "idx_comment_metric_comment_id_rank_score" +ON "p_comment_metric" ( + "comment_id" ASC, + "rank_score" ASC +); + -- ---------------------------- -- Indexes structure for table idx_tweet_comment_thumbs_uid_tid -- ---------------------------- @@ -644,6 +685,16 @@ ON "p_user" ( "username" ASC ); +-- ---------------------------- +-- Indexes structure for table p_user_metric +-- ---------------------------- +CREATE INDEX "idx_user_metric_user_id_tweets_count_trends" +ON "p_user_metric" ( + "user_id" ASC, + "tweets_count" ASC, + "latest_trends_on" ASC +); + -- ---------------------------- -- Indexes structure for table p_wallet_recharge -- ---------------------------- From 59076e33ae0c668634b3bb52347359b9b452f977 Mon Sep 17 00:00:00 2001 From: Michael Li Date: Sat, 23 Sep 2023 00:49:35 +0800 Subject: [PATCH 4/8] fixed get hots comments error --- internal/dao/jinzhu/comments.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/dao/jinzhu/comments.go b/internal/dao/jinzhu/comments.go index 5614c00f..678c7081 100644 --- a/internal/dao/jinzhu/comments.go +++ b/internal/dao/jinzhu/comments.go @@ -70,7 +70,7 @@ func (s *commentSrv) GetComments(tweetId int64, style cs.StyleCommentType, limit case cs.StyleCommentHots: // rank_score=评论回复数*2+点赞*4-点踩, order byrank_score DESC db = db.Joins(fmt.Sprintf("LEFT JOIN %s m ON %s.id=m.comment_id AND m.is_del=0", _commentMetric_, _comment_)) - sort = "is_essence DESC, m.rank_score DESC, id DESC" + sort = fmt.Sprintf("is_essence DESC, m.rank_score DESC, %s.id DESC", _comment_) case cs.StyleCommentNewest: sort = "is_essence DESC, id DESC" case cs.StyleCommentDefault: From b4ec79171112fa9637058d3f335ca90f9de93b46 Mon Sep 17 00:00:00 2001 From: Michael Li Date: Mon, 25 Sep 2023 00:02:04 +0800 Subject: [PATCH 5/8] update docker-compose.yaml --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 6082cab0..a6153ab8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -124,7 +124,7 @@ services: # - paopao-network backend: - image: bitbus/paopao-ce:0.5.0-alpha + image: bitbus/paopao-ce:0.5.0-beta restart: always depends_on: - db From fd6112a65ad663bba1ca26bfe5c1f3bb2b63cc9a Mon Sep 17 00:00:00 2001 From: Michael Li Date: Thu, 28 Sep 2023 12:18:13 +0800 Subject: [PATCH 6/8] change version info --- pkg/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/version/version.go b/pkg/version/version.go index 5a4dbcf5..87d58586 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -9,7 +9,7 @@ import ( ) const ( - series = "v0.5.0-dev" + series = "v0.5.0-alpha" ) var ( From 9414f8fa668a90faab77debaa7dc2cd10bdb92a4 Mon Sep 17 00:00:00 2001 From: Michael Li Date: Thu, 28 Sep 2023 12:18:48 +0800 Subject: [PATCH 7/8] change version info --- pkg/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/version/version.go b/pkg/version/version.go index 87d58586..e8eec44f 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -9,7 +9,7 @@ import ( ) const ( - series = "v0.5.0-alpha" + series = "v0.5.0-beta" ) var ( From 802f31a9f579366f9299bb1c295932bbc84807ee Mon Sep 17 00:00:00 2001 From: Michael Li Date: Sun, 1 Oct 2023 18:53:17 +0800 Subject: [PATCH 8/8] prepare to rc version --- docker-compose.yaml | 16 ++++++++-------- pkg/version/version.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index a6153ab8..9cada34c 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -78,13 +78,13 @@ services: networks: - paopao-network - meilisearch-ui: - image: riccoxie/meilisearch-ui:latest - restart: always - ports: - - 24900:24900 - networks: - - paopao-network + # meilisearch-ui: + # image: riccoxie/meilisearch-ui:latest + # restart: always + # ports: + # - 24900:24900 + # networks: + # - paopao-network # openobserve: # image: public.ecr.aws/zinclabs/openobserve:latest @@ -124,7 +124,7 @@ services: # - paopao-network backend: - image: bitbus/paopao-ce:0.5.0-beta + image: bitbus/paopao-ce:0.5.0-rc restart: always depends_on: - db diff --git a/pkg/version/version.go b/pkg/version/version.go index e8eec44f..93c5806d 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -9,7 +9,7 @@ import ( ) const ( - series = "v0.5.0-beta" + series = "v0.5.0-rc" ) var (