CreateResourceInTransaction create db resource model in transaction
(context middleware.Context, resourceSchema *schema.Schema, resource *schema.Resource)
| 665 | |
| 666 | //CreateResourceInTransaction create db resource model in transaction |
| 667 | func 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 |
| 714 | func UpdateResource( |
no test coverage detected