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

Function DeleteResourceInTransaction

server/resources/resource_management.go:982–1036  ·  view source on GitHub ↗

DeleteResourceInTransaction deletes resources in a transaction

(context middleware.Context, resourceSchema *schema.Schema, resourceID string)

Source from the content-addressed store, hash-verified

980
981//DeleteResourceInTransaction deletes resources in a transaction
982func DeleteResourceInTransaction(context middleware.Context, resourceSchema *schema.Schema, resourceID string) error {
983 defer measureRequestTime(time.Now(), "delete.in_tx", resourceSchema.ID)
984 mainTransaction := context["transaction"].(transaction.Transaction)
985 environmentManager := extension.GetManager()
986 environment, ok := environmentManager.GetEnvironment(resourceSchema.ID)
987 if !ok {
988 return fmt.Errorf("No environment for schema")
989 }
990
991 auth := context["auth"].(schema.Authorization)
992 policy := context["policy"].(*schema.Policy)
993 currCond := policy.GetCurrentResourceCondition()
994 tenantIDs := currCond.GetTenantIDFilter(schema.ActionDelete, auth.TenantID())
995 filter := transaction.IDFilter(resourceID)
996 if tenantIDs != nil {
997 filter["tenant_id"] = tenantIDs
998 }
999
1000 var resource *schema.Resource
1001 var err error
1002 switch resourceSchema.GetLockingPolicy("delete") {
1003 case schema.NoLocking:
1004 resource, err = mainTransaction.Fetch(resourceSchema, filter, nil)
1005 case schema.LockRelatedResources:
1006 resource, err = mainTransaction.LockFetch(resourceSchema, filter, schema.LockRelatedResources, nil)
1007 case schema.SkipRelatedResources:
1008 resource, err = mainTransaction.LockFetch(resourceSchema, filter, schema.SkipRelatedResources, nil)
1009 }
1010
1011 if err != nil {
1012 return err
1013 }
1014 if resource != nil {
1015 context["resource"] = resource.Data()
1016 }
1017 // apply property filter
1018 err = currCond.ApplyPropertyConditionFilter(schema.ActionUpdate, resource.Data(), nil)
1019 if err != nil {
1020 return ResourceError{err, "", Unauthorized}
1021 }
1022
1023 if err := extension.HandleEvent(context, environment, "pre_delete_in_transaction", resourceSchema.ID); err != nil {
1024 return err
1025 }
1026
1027 err = mainTransaction.Delete(resourceSchema, resourceID)
1028 if err != nil {
1029 return ResourceError{err, "", DeleteFailed}
1030 }
1031
1032 if err := extension.HandleEvent(context, environment, "post_delete_in_transaction", resourceSchema.ID); err != nil {
1033 return err
1034 }
1035 return nil
1036}
1037
1038// ActionResource runs custom action on resource
1039func ActionResource(context middleware.Context, dataStore db.DB, identityService middleware.IdentityService,

Callers 1

DeleteResourceFunction · 0.85

Calls 13

DataMethod · 0.95
measureRequestTimeFunction · 0.85
GetEnvironmentMethod · 0.80
GetTenantIDFilterMethod · 0.80
GetLockingPolicyMethod · 0.80
ErrorfMethod · 0.65
TenantIDMethod · 0.65
FetchMethod · 0.65
LockFetchMethod · 0.65
HandleEventMethod · 0.65

Tested by

no test coverage detected