Commit faedc864 authored by Vijay Kumar Chauhan's avatar Vijay Kumar Chauhan
Browse files

Merge branch 'km_handleTxnErrInCallService' into 'staging'

Transaction handle support added for call service.

See merge request !246
parents fa972a1c 821a4d3f
Branches
Tags
2 merge requests!252staging branch is merged into devbranch.,!246Transaction handle support added for call service.
Showing with 128 additions and 0 deletions
package routebuildermdl package routebuildermdl
import ( import (
"context"
"strings" "strings"
"time" "time"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/constantmdl" "corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/constantmdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/dalmdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl" "corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl"
"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl" "corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/loggermdl"
...@@ -205,3 +207,129 @@ func CallServiceWithBranch(name, branch string, rs *gjson.Result, isRestricted b ...@@ -205,3 +207,129 @@ func CallServiceWithBranch(name, branch string, rs *gjson.Result, isRestricted b
} }
return res, nil return res, nil
} }
// CallServiceTXN - calls service with provided configuration, returns result, abstractBusinessLogicHolder and error from executed service
func CallServiceReturnAB(name string, rs *gjson.Result, isRestricted bool, isRoleBased bool, p servicebuildermdl.Principal) (interface{}, *servicebuildermdl.AbstractBusinessLogicHolder, error) {
return CallServiceReturnABWithBranch(name, constantmdl.Branch_Main, rs, isRestricted, isRoleBased, p)
}
// CallServiceWithBranchHandleTXN - calls service of given branch with provided configuration, returns result, abstractBusinessLogicHolder and error from executed service and handles transaction
func CallServiceReturnABWithBranch(name, branch string, rs *gjson.Result, isRestricted bool, isRoleBased bool, p servicebuildermdl.Principal) (interface{}, *servicebuildermdl.AbstractBusinessLogicHolder, error) {
var found bool
var service interface{}
if strings.TrimSpace(branch) == "" {
loggermdl.LogError("Branch is empty")
return nil, nil, errormdl.Wrap("Branch is empty")
}
activityName := ConcatenateEntityWithBranch(name, branch)
// if isRestricted {
// if isRoleBased {
// service, found = roleBasedServices.Get(activityName)
// } else {
// service, found = restrictedServices.Get(activityName)
// }
// } else {
// service, found = openServices.Get(activityName)
// }
switch {
case isRestricted == true && isRoleBased == true:
service, found = roleBasedServices.Get(activityName)
case isRestricted == true && isRoleBased == false:
service, found = restrictedServices.Get(activityName)
case isRestricted == false:
service, found = openServices.Get(activityName)
}
if !found {
loggermdl.LogError("Service Not Found: " + name)
return nil, nil, errormdl.Wrap("Service Not Found: " + name)
}
tmpSvcCache, ok := service.(ServiceCache)
if !ok {
loggermdl.LogError("Unable to cast service object for ", name)
return nil, nil, errormdl.Wrap("Service execution failed for " + name)
}
serviceCache := tmpSvcCache
res, ab, err := serviceCache.Service(rs, p)
if errormdl.CheckErr1(err) != nil {
// Rollback
if ab.TransactionEnable {
switch ab.DatabaseType {
case dalmdl.MYSQL:
if ab.TXN != nil {
loggermdl.LogError("MYSQL Transaction Rollbacked")
err = ab.TXN.Rollback()
if err != nil {
loggermdl.LogError("Error while rollback")
return res, ab, errormdl.Wrap("Error while rollback")
}
}
case dalmdl.SQLSERVER:
if ab.SQLServerTXN != nil {
loggermdl.LogError("SQLSERVER Transaction Rollbacked")
err = ab.SQLServerTXN.Rollback()
if err != nil {
loggermdl.LogError("Error while rollback")
return res, ab, errormdl.Wrap("Error while rollback")
}
}
case dalmdl.GraphDB:
if ab.GraphDbTXN != nil {
loggermdl.LogError("GRAPHDB Transaction Rollbacked")
err = ab.GraphDbTXN.Discard(context.TODO())
if err != nil {
loggermdl.LogError("Error while rollback")
return res, ab, errormdl.Wrap("Error while rollback")
}
}
default:
loggermdl.LogError("Invalid database type while rollback transaction")
}
}
} else {
if ab.TransactionEnable {
// Commit
switch ab.DatabaseType {
case dalmdl.MYSQL:
if ab.TXN != nil {
loggermdl.LogError("MYSQL Transaction Commited")
err = ab.TXN.Commit()
if err != nil {
loggermdl.LogError("Error while commit")
return res, ab, errormdl.Wrap("Error while commit")
}
}
case dalmdl.SQLSERVER:
if ab.SQLServerTXN != nil {
loggermdl.LogError("SQLSERVER Transaction Commited")
err = ab.SQLServerTXN.Commit()
if err != nil {
loggermdl.LogError("Error while commit")
return res, ab, errormdl.Wrap("Error while commit")
}
}
case dalmdl.GraphDB:
if ab.GraphDbTXN != nil {
loggermdl.LogError("GRAPHDB Transaction Commited")
err = ab.GraphDbTXN.Commit(context.TODO())
if err != nil {
loggermdl.LogError("Error while commit")
return res, ab, errormdl.Wrap("Error while commit")
// responseDataObj.Error = err.Error()
// responseDataObj.ErrorCode = errormdl.GRAPHDBERROR
}
}
default:
loggermdl.LogError("Invalid database type while commiting transaction")
}
}
}
return res, ab, nil
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment