MCPcopy Create free account
hub / github.com/cloudwan/gohan / CreateResourceInTransaction

Function CreateResourceInTransaction

server/resources/resource_management.go:667–711  ·  view source on GitHub ↗

CreateResourceInTransaction create db resource model in transaction

(context middleware.Context, resourceSchema *schema.Schema, resource *schema.Resource)

Source from the content-addressed store, hash-verified

665
666//CreateResourceInTransaction create db resource model in transaction
667func CreateResourceInTransaction(context middleware.Context, resourceSchema *schema.Schema, resource *schema.Resource) error {
668 defer measureRequestTime(time.Now(), "create.in_tx", resource.Schema().ID)
669 manager := schema.GetManager()
670 mainTransaction := context["transaction"].(transaction.Transaction)
671 environmentManager := extension.GetManager()
672 environment, ok := environmentManager.GetEnvironment(resourceSchema.ID)
673 if !ok {
674 return fmt.Errorf("No environment for schema")
675 }
676
677 if err := extension.HandleEvent(context, environment, "pre_create_in_transaction", resourceSchema.ID); err != nil {
678 return err
679 }
680 dataMap, ok := context["resource"].(map[string]interface{})
681 if ok {
682 var err error
683 resource, err = manager.LoadResource(resourceSchema.ID, dataMap)
684 if err != nil {
685 return fmt.Errorf("Loading resource failed: %s", err)
686 }
687 if err := ValidateAttachmentsForResource(context, resourceSchema, dataMap); err != nil {
688 return err
689 }
690 }
691 if err := mainTransaction.Create(resource); err != nil {
692 log.Debug("%s transaction error", err)
693 if isForeignKeyFailed(err) {
694 return handleForeignKeyError(err, dataMap)
695 }
696 return ResourceError{
697 err,
698 fmt.Sprintf("Failed to store data in database: %v", err),
699 CreateFailed}
700 }
701
702 response := map[string]interface{}{}
703 response[resourceSchema.Singular] = resource.Data()
704 context["response"] = response
705
706 if err := extension.HandleEvent(context, environment, "post_create_in_transaction", resourceSchema.ID); err != nil {
707 return err
708 }
709
710 return nil
711}
712
713// UpdateResource updates the resource specified by the schema and ID using the dataMap
714func UpdateResource(

Callers 1

CreateResourceFunction · 0.85

Calls 12

measureRequestTimeFunction · 0.85
isForeignKeyFailedFunction · 0.85
handleForeignKeyErrorFunction · 0.85
GetEnvironmentMethod · 0.80
LoadResourceMethod · 0.80
SchemaMethod · 0.65
ErrorfMethod · 0.65
HandleEventMethod · 0.65
CreateMethod · 0.65
DebugMethod · 0.65
DataMethod · 0.45

Tested by

no test coverage detected