package pg import ( "context" "github.com/chaitin/panda-wiki/consts" "github.com/chaitin/panda-wiki/domain" "github.com/chaitin/panda-wiki/log" "github.com/chaitin/panda-wiki/store/pg" ) type CommentRepository struct { db *pg.DB logger *log.Logger } func NewCommentRepository(db *pg.DB, logger *log.Logger) *CommentRepository { return &CommentRepository{db: db, logger: logger.WithModule("repo.pg.comment")} } func (r *CommentRepository) CreateComment(ctx context.Context, comment *domain.Comment) error { // 插入到数据库中 if err := r.db.WithContext(ctx).Create(comment).Error; err != nil { return err } return nil } func (r *CommentRepository) GetCommentList(ctx context.Context, nodeID string) ([]*domain.ShareCommentListItem, int64, error) { // 按照时间排序来查询node_id的comments var comments []*domain.ShareCommentListItem query := r.db.WithContext(ctx).Model(&domain.Comment{}).Where("node_id = ?", nodeID) if domain.GetBaseEditionLimitation(ctx).AllowCommentAudit { query = query.Where("status = ?", domain.CommentStatusAccepted) //accepted } var count int64 if err := query.Count(&count).Error; err != nil { return nil, 0, err } if err := query.Order("created_at DESC").Find(&comments).Error; err != nil { return nil, 0, err } return comments, count, nil } func (r *CommentRepository) GetCommentListByKbID(ctx context.Context, req *domain.CommentListReq, edition consts.LicenseEdition) ([]*domain.CommentListItem, int64, error) { comments := []*domain.CommentListItem{} query := r.db.WithContext(ctx).Model(&domain.Comment{}).Where("comments.kb_id = ?", req.KbID) var count int64 if req.Status == nil { if err := query.Count(&count).Error; err != nil { return nil, 0, err } } else { if domain.GetBaseEditionLimitation(ctx).AllowCommentAudit { query = query.Where("comments.status = ?", *req.Status) } // 按照时间排序来查询kb_id的comments ->reject pending accepted if err := query.Count(&count).Error; err != nil { return nil, 0, err } } // select if err := query. Joins("left join nodes on comments.node_id = nodes.id"). Select("comments.*, nodes.name as node_name, nodes.type as app_type"). Offset(req.Offset()). Limit(req.Limit()). Order("comments.created_at DESC"). Find(&comments).Error; err != nil { return nil, 0, err } // success return comments, count, nil } func (r *CommentRepository) DeleteCommentList(ctx context.Context, commentID []string) error { // 批量删除指定id的comment,获取删除的总的数量、 query := r.db.WithContext(ctx).Model(&domain.Comment{}).Where("id IN (?)", commentID) if err := query.Delete(&domain.Comment{}).Error; err != nil { return err } return nil }