package subscribers import ( "context" "encoding/json" "backend/app/events" "backend/app/events/publishers" "backend/app/http/posts" "backend/providers/job" "git.ipao.vip/rogeecn/atom/contracts" "github.com/ThreeDotsLabs/watermill/message" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) var _ contracts.EventHandler = (*PostDeleted)(nil) // @provider(event) type PostDeleted struct { log *logrus.Entry `inject:"false"` postSvc *posts.Service job *job.Job } func (e *PostDeleted) Prepare() error { e.log = logrus.WithField("module", "events.subscribers.post_deleted") return nil } // PublishToTopic implements contracts.EventHandler. func (e *PostDeleted) PublishToTopic() string { return events.TopicProcessed } // Topic implements contracts.EventHandler. func (e *PostDeleted) Topic() string { return events.TopicPostDeleted } // Handler implements contracts.EventHandler. func (e *PostDeleted) Handler(msg *message.Message) ([]*message.Message, error) { var payload publishers.PostDeleted err := json.Unmarshal(msg.Payload, &payload) if err != nil { return nil, err } e.log.Infof("received event %s", msg.Payload) post, err := e.postSvc.ForceGetPostByID(context.Background(), payload.ID) if err != nil { return nil, errors.Wrapf(err, "failed to get item by id: %d", payload.ID) } _ = post // TODO: handle post deletion return nil, nil }