article_comment.go 5.0 KB
package domain

import (
	"context"

	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
)

// 文章评论
type ArticleComment struct {
	Id             int64             `json:"id"` // 评论id
	CompanyId      int64             `json:"companyId"`
	CreatedAt      int64             `json:"createdAt,omitempty"`
	UpdatedAt      int64             `json:"updatedAt,omitempty"`
	DeletedAt      int64             `json:"deletedAt,omitempty"`
	Version        int               `json:"version,omitempty"`
	Pid            int64             `json:"pid"`            // 对哪个评论进行回复
	TopId          int64             `json:"topId"`          // 归属于最上级的哪个评论
	ArticleId      int64             `json:"articleId"`      // 文章id
	SectionId      int64             `json:"sectionId"`      // 文本段落内容id
	SectionContent string            `json:"sectionContent"` // 引用的文章内容文本
	FromUserId     int64             `json:"fromUserId"`     // 谁填写的评论
	FromUser       UserSimple        `json:"fromUser"`       // 谁填写的评论
	ToUserId       int64             `json:"toUserId"`       // 回复谁的评论
	ToUser         UserSimple        `json:"toUser"`         // 回复谁的评论
	Content        string            `json:"content"`        // 评论内容
	CountReply     int               `json:"countReply"`     // 回复数量
	CountUserLove  int               `json:"countUserLove"`  // 用户点赞数量
	CountAdminLove int               `json:"countAdminLove"` // 运营点赞数量
	Show           CommentShow       `json:"showState"`      // 评论的展示状态(1显示、2不显示)
	AtWho          []UserSimple      `json:"atWho"`          // 填写评论时@的人. 评论内容中出现的@人,用于页面上进行匹配文本后进行特殊显示处理
	MatchUrl       map[string]string `json:"matchUrl"`       // 评论内容中出现的url. 用于页面上进行匹配文本后进行特殊显示处理
	// ...more
}

// 评论的展示状态(1显示、2不显示)
type CommentShow int

const (
	CommentShowEnable  CommentShow = 1
	CommentShowDisable CommentShow = 2
	CommentShowIllegal CommentShow = 3
)

func (show CommentShow) Named() string {
	switch show {
	case CommentShowEnable:
		return "显示"
	case CommentShowDisable:
		return "隐藏"
	case CommentShowIllegal:
		return "违规"
	}
	return ""
}

type ArticleCommentShow struct {
	Id             int64 // 评论id
	Pid            int64
	TopId          int64
	ArticleTitle   string // 文章标题
	FromUserId     int64  // 评论填写人的id
	Content        string // 评论内容
	CountReply     int    // 回复数量
	CountUserLove  int    // 用户点赞数量
	CountAdminLove int    // 运营点赞数量
	Show           int    // 评论的展示状态(1显示、2不显示)
	CreatedAt      int64  // 评论的创建时间
}

type ArticleCommentRepository interface {
	Insert(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error)
	Update(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error)
	UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error)
	Delete(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error)

	FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ArticleComment, error)

	Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ArticleComment, error)
	IncreaseCountUserLove(ctx context.Context, conn transaction.Conn, incr int, commentId int64) error //点赞数量变动
	IncreaseCountReply(ctx context.Context, conn transaction.Conn, incr int, commentId int64) error    // 评论回复数量变动
	Top5Comment(ctx context.Context, conn transaction.Conn, companyId int64, articleId int64) ([]*ArticleComment, error)
	// 特定的查询
	CustomSearchBy(ctx context.Context, conn transaction.Conn, companyId int64, page int, size int,
		topId int64, articleTitle string, contentLike string, fromUserId int64, show int, createdAtRange [2]int64) (int, []*ArticleCommentShow, error)
	// CommentUserCount 统计帖子评论人数
	CommentUserCount(ctx context.Context, conn transaction.Conn, companyId int64, articleId int64) (int64, error)
	// ReplyUserCount 统计评论回复人数
	ReplyUserCount(ctx context.Context, conn transaction.Conn, companyId int64, commentId int64) (int64, error)
}

// 运营点数 填写的最大值
func (m *ArticleComment) MaxCountAdminLove(articleWhoRead int) int {
	// 帖子的可见人数/3向上取整
	x := articleWhoRead / 3 // 取商
	y := articleWhoRead % 3 // 取余
	if y > 0 {
		x = x + 1
	}
	return x
}

// GetSubscribeMessageContent 获取订阅消息评论内容 最多显示20个字,超出用...
func (m *ArticleComment) GetSubscribeMessageContent() string {
	runeContent := []rune(m.Content)
	if len(runeContent) > 20 {
		return string(runeContent[0:20]) + "..."
	}
	return m.Content
}