pkg/pr/dao/message.go
package dao import ( "context" "github.com/horizoncd/horizon/core/common" "gorm.io/gorm" herrors "github.com/horizoncd/horizon/core/errors" "github.com/horizoncd/horizon/lib/q" "github.com/horizoncd/horizon/pkg/pr/models") Similar blocks of code found in 2 locations. Consider refactoring.type PRMessageDAO interface { // Create creates a PRMessage Create(ctx context.Context, prMessage *models.PRMessage) (*models.PRMessage, error) // List lists PRMessage order by created_at asc List(ctx context.Context, pipelineRunID uint, query *q.Query) (int, []*models.PRMessage, error)} type prMessageDAO struct{ db *gorm.DB } func NewPRMessageDAO(db *gorm.DB) PRMessageDAO { return &prMessageDAO{db: db}} Similar blocks of code found in 5 locations. Consider refactoring.func (d *prMessageDAO) Create(ctx context.Context, prMessage *models.PRMessage) (*models.PRMessage, error) { result := d.db.WithContext(ctx).Create(prMessage) if result.Error != nil { return nil, herrors.NewErrInsertFailed(herrors.PRMessageInDB, result.Error.Error()) } return prMessage, result.Error} func (d *prMessageDAO) List(ctx context.Context, pipelineRunID uint, query *q.Query) (int, []*models.PRMessage, error) { var ( total int64 prMessages []*models.PRMessage ) sql := d.db.WithContext(ctx).Table("tb_pr_msg"). Where("pipeline_run_id = ?", pipelineRunID). Order("created_at asc") if system, ok := query.Keywords[common.MessageQueryBySystem].(bool); ok { messageType := models.MessageTypeUser if system { messageType = models.MessageTypeSystem } sql.Where("message_type = ?", messageType) } sql.Count(&total) result := sql.Limit(query.Limit()).Offset(query.Offset()).Find(&prMessages) if result.Error != nil { return 0, nil, herrors.NewErrGetFailed(herrors.PRMessageInDB, result.Error.Error()) } if result.RowsAffected == 0 { return 0, []*models.PRMessage{}, nil } return int(total), prMessages, nil}