From 09cfe41e4fed27e1f3829c6b95f5c53bb0f548e4 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 28 Aug 2023 13:34:47 +0200 Subject: [PATCH] feat(tasks): remove deleted tasks from Typesense --- pkg/models/listeners.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) 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