Add User Partner and Product
This commit is contained in:
@@ -6,31 +6,68 @@ import (
|
||||
"furtuna-be/internal/common/mycontext"
|
||||
"furtuna-be/internal/entity"
|
||||
"furtuna-be/internal/repository"
|
||||
|
||||
"furtuna-be/internal/services/users"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type PartnerService struct {
|
||||
repo repository.PartnerRepository
|
||||
repo repository.PartnerRepository
|
||||
trx repository.TransactionManager
|
||||
userSvc *users.UserService
|
||||
walletRepo repository.WalletRepository
|
||||
}
|
||||
|
||||
func NewPartnerService(repo repository.PartnerRepository) *PartnerService {
|
||||
func NewPartnerService(repo repository.PartnerRepository,
|
||||
userSvc *users.UserService, repoManager repository.TransactionManager,
|
||||
walletRepo repository.WalletRepository) *PartnerService {
|
||||
return &PartnerService{
|
||||
repo: repo,
|
||||
repo: repo,
|
||||
userSvc: userSvc,
|
||||
trx: repoManager,
|
||||
walletRepo: walletRepo,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *PartnerService) Create(ctx mycontext.Context, PartnerReq *entity.Partner) (*entity.Partner, error) {
|
||||
PartnerDB := PartnerReq.ToPartnerDB()
|
||||
PartnerDB.CreatedBy = ctx.RequestedBy()
|
||||
func (s *PartnerService) Create(ctx mycontext.Context, partnerReq *entity.CreatePartnerRequest) (*entity.Partner, error) {
|
||||
var err error
|
||||
|
||||
PartnerDB, err := s.repo.Create(ctx, PartnerDB)
|
||||
tx, err := s.trx.Begin(ctx)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when create Partner", zap.Error(err))
|
||||
logger.ContextLogger(ctx).Error("error when starting transaction", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return PartnerDB.ToPartner(), nil
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
s.trx.Rollback(tx)
|
||||
panic(r)
|
||||
} else if err != nil {
|
||||
s.trx.Rollback(tx)
|
||||
} else {
|
||||
err = s.trx.Commit(tx).Error
|
||||
}
|
||||
}()
|
||||
|
||||
// Create Partner
|
||||
partnerDB := partnerReq.ToPartnerDB(ctx.RequestedBy())
|
||||
if partnerDB, err = s.repo.CreateWithTx(ctx, tx, partnerDB); err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when creating partner", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
adminUser := partnerReq.ToUserAdmin(partnerDB.ID)
|
||||
if adminUser, err = s.userSvc.CreateWithTx(ctx, tx, adminUser); err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when creating admin user", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
partnerWallet := partnerReq.ToWallet(partnerDB.ID)
|
||||
if partnerWallet, err = s.walletRepo.Create(ctx, tx, partnerWallet); err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when creating wallet", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return partnerDB.ToPartner(), nil
|
||||
}
|
||||
|
||||
func (s *PartnerService) Update(ctx mycontext.Context, id int64, PartnerReq *entity.Partner) (*entity.Partner, error) {
|
||||
|
||||
Reference in New Issue
Block a user