Update Mitra
This commit is contained in:
@@ -76,20 +76,44 @@ func (s *PartnerService) Create(ctx mycontext.Context, partnerReq *entity.Create
|
||||
return partnerDB.ToPartner(), nil
|
||||
}
|
||||
|
||||
func (s *PartnerService) Update(ctx mycontext.Context, id int64, PartnerReq *entity.Partner) (*entity.Partner, error) {
|
||||
existingPartner, err := s.repo.GetByID(ctx, id)
|
||||
func (s *PartnerService) Update(ctx mycontext.Context, req *entity.PartnerUpdate) (*entity.Partner, error) {
|
||||
existingPartner, err := s.repo.GetByID(ctx, req.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
existingPartner.ToUpdatedPartnerData(ctx.RequestedBy(), *req)
|
||||
|
||||
existingPartner.ToUpdatedPartner(ctx.RequestedBy(), *PartnerReq)
|
||||
tx, err := s.trx.Begin(ctx)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when starting transaction", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
updatedPartnerDB, err := s.repo.Update(ctx, existingPartner.ToPartnerDB())
|
||||
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
|
||||
}
|
||||
}()
|
||||
|
||||
updatedPartnerDB, err := s.repo.UpdateWithTx(ctx, tx, existingPartner.ToPartnerDB())
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when update Partner", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.AdminUserID != 0 {
|
||||
adminUser := req.ToUserAdmin(&req.ID)
|
||||
if adminUser, err = s.userSvc.UpdateWithTx(ctx, tx, adminUser); err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when creating admin user", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return updatedPartnerDB.ToPartner(), nil
|
||||
}
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ type User interface {
|
||||
CreateWithTx(ctx mycontext.Context, tx *gorm.DB, userReq *entity.User) (*entity.User, error)
|
||||
GetAll(ctx mycontext.Context, search entity.UserSearch) ([]*entity.User, int, error)
|
||||
Update(ctx mycontext.Context, id int64, userReq *entity.User) (*entity.User, error)
|
||||
UpdateWithTx(ctx mycontext.Context, tx *gorm.DB, req *entity.User) (*entity.User, error)
|
||||
GetByID(ctx mycontext.Context, id int64) (*entity.User, error)
|
||||
Delete(ctx mycontext.Context, id int64) error
|
||||
}
|
||||
@@ -115,7 +116,7 @@ type OSSService interface {
|
||||
|
||||
type Partner interface {
|
||||
Create(ctx mycontext.Context, branchReq *entity.CreatePartnerRequest) (*entity.Partner, error)
|
||||
Update(ctx mycontext.Context, id int64, branchReq *entity.Partner) (*entity.Partner, error)
|
||||
Update(ctx mycontext.Context, branchReq *entity.PartnerUpdate) (*entity.Partner, error)
|
||||
GetByID(ctx context.Context, id int64) (*entity.Partner, error)
|
||||
GetAll(ctx context.Context, search entity.PartnerSearch) ([]*entity.Partner, int, error)
|
||||
Delete(ctx mycontext.Context, id int64) error
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package users
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"furtuna-be/internal/common/mycontext"
|
||||
"gorm.io/gorm"
|
||||
@@ -101,6 +102,10 @@ func (s *UserService) Update(ctx mycontext.Context, id int64, userReq *entity.Us
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if existingUser == nil {
|
||||
return nil, errors.New("user not found")
|
||||
}
|
||||
|
||||
//if changed branch
|
||||
if *userReq.PartnerID > 0 {
|
||||
branch, err := s.branchRepo.GetBranchByID(ctx, *userReq.PartnerID)
|
||||
@@ -125,6 +130,34 @@ func (s *UserService) Update(ctx mycontext.Context, id int64, userReq *entity.Us
|
||||
return updatedUserDB.ToUser(), nil
|
||||
}
|
||||
|
||||
func (s *UserService) UpdateWithTx(ctx mycontext.Context, tx *gorm.DB, req *entity.User) (*entity.User, error) {
|
||||
existingUser, err := s.repo.GetUserByID(ctx, req.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if existingUser == nil {
|
||||
return nil, errors.New("user not found")
|
||||
}
|
||||
|
||||
if *existingUser.PartnerID != *req.PartnerID {
|
||||
return nil, errors.New("invalid request")
|
||||
}
|
||||
|
||||
err = existingUser.ToUpdatedUser(*req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
updatedUserDB, err := s.repo.UpdateUserWithTx(ctx, tx, existingUser)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when update user", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return updatedUserDB.ToUser(), nil
|
||||
}
|
||||
|
||||
func (s *UserService) Delete(ctx mycontext.Context, id int64) error {
|
||||
userDB, err := s.repo.GetUserByID(ctx, id)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user