reposetory.go 3.1 KB
package factory

import (
	"github.com/linmadan/egglib-go/core/application"
	"github.com/linmadan/egglib-go/transaction/pg"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
	pgDB "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/repository"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils"
)

func CreateTransactionContext(options map[string]interface{}) (application.TransactionContext, error) {
	return pg.NewPGTransactionContext(pgDB.DB), nil
}

// StartTransaction 事务创建
func StartTransaction() (application.TransactionContext, error) {
	transactionContext, err := CreateTransactionContext(nil)
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return transactionContext, nil
}

// ValidateStartTransaction 事务创建并校验入参
func ValidateStartTransaction(in interface{}) (application.TransactionContext, error) {
	if err := utils.ValidateCommand(in); err != nil {
		return nil, application.ThrowError(application.ARG_ERROR, err.Error())
	}
	return StartTransaction()
}

func CreateCompanyRepository(options map[string]interface{}) domain.CompanyRepository {
	var transactionContext *pg.TransactionContext
	if value, ok := options["transactionContext"]; ok {
		transactionContext = value.(*pg.TransactionContext)
	}
	return repository.NewCompanyRepository(transactionContext)
}

func CreateUserRepository(options map[string]interface{}) domain.UserRepository {
	var transactionContext *pg.TransactionContext
	if value, ok := options["transactionContext"]; ok {
		transactionContext = value.(*pg.TransactionContext)
	}
	return repository.NewUserRepository(transactionContext)
}

func CreateDepartmentRepository(options map[string]interface{}) domain.DepartmentRepository {
	var transactionContext *pg.TransactionContext
	if value, ok := options["transactionContext"]; ok {
		transactionContext = value.(*pg.TransactionContext)
	}
	return repository.NewDepartmentRepository(transactionContext)
}

func CreateRoleRepository(options map[string]interface{}) domain.RoleRepository {
	var transactionContext *pg.TransactionContext
	if value, ok := options["transactionContext"]; ok {
		transactionContext = value.(*pg.TransactionContext)
	}
	return repository.NewRoleRepository(transactionContext)
}

func CreateRoleUserRepository(options map[string]interface{}) domain.RoleUserRepository {
	var transactionContext *pg.TransactionContext
	if value, ok := options["transactionContext"]; ok {
		transactionContext = value.(*pg.TransactionContext)
	}
	return repository.NewRoleUserRepository(transactionContext)
}

func CreateReceivedMessageRepository(options map[string]interface{}) domain.ReceivedMessageRepository {
	var transactionContext *pg.TransactionContext
	if value, ok := options["transactionContext"]; ok {
		transactionContext = value.(*pg.TransactionContext)
	}
	return repository.NewReceivedMessageRepository(transactionContext)
}