diff --git a/pkg/models/listeners.go b/pkg/models/listeners.go index 738485ea78d..4522ab92260 100644 --- a/pkg/models/listeners.go +++ b/pkg/models/listeners.go @@ -17,7 +17,9 @@ package models import ( + "code.vikunja.io/api/pkg/config" "encoding/json" + "strconv" "code.vikunja.io/api/pkg/db" "code.vikunja.io/api/pkg/events" @@ -58,6 +60,9 @@ func RegisterListeners() { events.RegisterListener((&TaskAttachmentDeletedEvent{}).Name(), &HandleTaskUpdateLastUpdated{}) events.RegisterListener((&TaskRelationCreatedEvent{}).Name(), &HandleTaskUpdateLastUpdated{}) events.RegisterListener((&TaskRelationDeletedEvent{}).Name(), &HandleTaskUpdateLastUpdated{}) + if config.TypesenseEnabled.GetBool() { + events.RegisterListener((&TaskDeletedEvent{}).Name(), &RemoveTaskFromTypesense{}) + } } ////// @@ -474,6 +479,32 @@ func (s *HandleTaskUpdateLastUpdated) Handle(msg *message.Message) (err error) { return updateTaskLastUpdated(sess, &Task{ID: taskIDInt}) } +// RemoveTaskFromTypesense represents a listener +type RemoveTaskFromTypesense struct { +} + +// Name defines the name for the RemoveTaskFromTypesense listener +func (s *RemoveTaskFromTypesense) Name() string { + return "remove.task.from.typesense" +} + +// Handle is executed when the event RemoveTaskFromTypesense listens on is fired +func (s *RemoveTaskFromTypesense) Handle(msg *message.Message) (err error) { + event := &TaskDeletedEvent{} + err = json.Unmarshal(msg.Payload, event) + if err != nil { + return err + } + + log.Debugf("[Typesense Sync] Removing task %d from Typesense", event.Task.ID) + + _, err = typesenseClient. + Collection("tasks"). + Document(strconv.FormatInt(event.Task.ID, 10)). + Delete() + return err +} + /////// // Project Event Listeners