diff --git a/pkg/notify/models/receiver.go b/pkg/notify/models/receiver.go index 48dd796b5d..16f9d52274 100644 --- a/pkg/notify/models/receiver.go +++ b/pkg/notify/models/receiver.go @@ -915,9 +915,28 @@ func (r *SReceiver) Delete(ctx context.Context, userCred mcclient.TokenCredentia return err } } + r.deleteReceiverInSubscriber(ctx) return r.SStatusStandaloneResourceBase.Delete(ctx, userCred) } +func (r *SReceiver) deleteReceiverInSubscriber(ctx context.Context) { + q := SubscriberReceiverManager.Query().Equals("receiver_id", r.Id) + srs := make([]SSubscriberReceiver, 0, 2) + err := db.FetchModelObjects(SubscriberReceiverManager, q, &srs) + if err != nil { + log.Infof("unable to get SubscriberReceiver: %s", err.Error()) + } + for i := range srs { + sr := &srs[i] + _, err := db.Update(sr, func() error { + return sr.MarkDelete() + }) + if err != nil { + log.Errorf("unable to delete subscriber receiver for receiver %q", r.Id) + } + } +} + func (r *SReceiver) IsOwner(userCred mcclient.TokenCredential) bool { return r.Id == userCred.GetUserId() } diff --git a/pkg/notify/models/robot.go b/pkg/notify/models/robot.go index 9049593c23..e0d855fb0e 100644 --- a/pkg/notify/models/robot.go +++ b/pkg/notify/models/robot.go @@ -13,6 +13,7 @@ import ( "yunion.io/x/onecloud/pkg/apis" idenapi "yunion.io/x/onecloud/pkg/apis/identity" + "yunion.io/x/onecloud/pkg/apis/notify" api "yunion.io/x/onecloud/pkg/apis/notify" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/httperrors" @@ -280,3 +281,22 @@ func (r *SRobot) PerformDisable(ctx context.Context, userCred mcclient.TokenCred } return nil, nil } + +func (r *SRobot) PostDelete(ctx context.Context, userCred mcclient.TokenCredential) { + q := SubscriberManager.Query().Equals("type", notify.SUBSCRIBER_TYPE_ROBOT).Equals("identification", r.GetId()) + subscribers := make([]SSubscriber, 0, 2) + err := db.FetchModelObjects(SubscriberManager, q, &subscribers) + if err != nil { + log.Errorf("unable to fetch subscribers with robot %q", r.GetId()) + return + } + for i := range subscribers { + subscriber := &subscribers[i] + _, err := db.Update(r, func() error { + return subscriber.MarkDelete() + }) + if err != nil { + log.Errorf("unable to delete subscriber %q because of deleting of robot %q", subscribers[i].GetId(), r.GetId()) + } + } +} diff --git a/pkg/notify/models/subscriber.go b/pkg/notify/models/subscriber.go index 4ffc7a5151..95c6e7fbfc 100644 --- a/pkg/notify/models/subscriber.go +++ b/pkg/notify/models/subscriber.go @@ -62,7 +62,7 @@ type SSubscriber struct { TopicID string `width:"128" charset:"ascii" nullable:"false" index:"true" get:"user" list:"user"` Type string `width:"16" charset:"ascii" nullable:"false" index:"true" get:"user" list:"user"` - Identification string `width:"128" charset:"ascii" nullable:"false"` + Identification string `width:"128" charset:"ascii" nullable:"false" index:"true"` RoleScope string `width:"8" charset:"ascii" nullable:"false" get:"user" list:"user"` ResourceScope string `width:"8" charset:"ascii" nullable:"false" get:"user" list:"user"` }