pg_task_level_repository.go 1.8 KB
package repository

import (
	pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models"
)

//任务

type TaskLevelRepository struct {
	transactionContext *pgTransaction.TransactionContext
}

var _ domain.TaskLevelRepository = (*TaskLevelRepository)(nil)

func NewTaskLevelRepository(transactionContext *pgTransaction.TransactionContext) *TaskLevelRepository {
	return &TaskLevelRepository{transactionContext: transactionContext}
}

func (repo *TaskLevelRepository) TransformToDomain(d *models.TaskLevel) *domain.TaskLevel {
	return &domain.TaskLevel{
		Id:        d.Id,
		LevelName: d.LevelName,
		CompanyId: d.CompanyId,
	}
}

func (repo *TaskLevelRepository) Save(param *domain.TaskLevel) error {

	m := models.TaskLevel{
		Id:        param.Id,
		LevelName: param.LevelName,
		CompanyId: param.CompanyId,
	}
	db := repo.transactionContext.PgTx
	if m.Id == 0 {
		_, err := db.Model(&m).Insert()
		if err != nil {
			return err
		}
	} else {
		_, err := db.Model(&m).WherePK().Update()
		if err != nil {
			return err
		}
	}
	param.Id = m.Id
	return nil
}

func (repo *TaskLevelRepository) Find(queryOptions map[string]interface{}) (int, []*domain.TaskLevel, error) {
	tx := repo.transactionContext.PgTx
	var m []*models.TaskLevel
	query := tx.Model(&m)
	if v, ok := queryOptions["companyId"]; ok {
		query.Where("company_id=?", v)
	}
	if v, ok := queryOptions["levelName"]; ok {
		query.Where("level_name=?", v)
	}
	query.Order("id desc")
	count, err := query.SelectAndCount()
	if err != nil {
		return 0, nil, err
	}
	arrays := make([]*domain.TaskLevel, 0)
	for _, v := range m {
		d := repo.TransformToDomain(v)
		arrays = append(arrays, d)
	}
	return count, arrays, nil
}