From 521300613f24f2ed585ca7da49a02b58f7d77fb8 Mon Sep 17 00:00:00 2001 From: kolaente Date: Sat, 6 Apr 2024 14:04:04 +0200 Subject: [PATCH] fix: update task in typesense when adding a label or assignee to them Resolves https://community.vikunja.io/t/typesense-only-works-if-i-re-index/2212 --- pkg/models/label_task.go | 19 +++++++++++++++++-- pkg/models/task_assignees.go | 7 +++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/pkg/models/label_task.go b/pkg/models/label_task.go index ede890940..332a5b3b0 100644 --- a/pkg/models/label_task.go +++ b/pkg/models/label_task.go @@ -17,6 +17,7 @@ package models import ( + "code.vikunja.io/api/pkg/events" "strconv" "strings" "time" @@ -46,7 +47,7 @@ type LabelTask struct { } // TableName makes a pretty table name -func (LabelTask) TableName() string { +func (*LabelTask) TableName() string { return "label_tasks" } @@ -84,7 +85,7 @@ func (lt *LabelTask) Delete(s *xorm.Session, _ web.Auth) (err error) { // @Failure 404 {object} web.HTTPError "The label does not exist." // @Failure 500 {object} models.Message "Internal error" // @Router /tasks/{task}/labels [put] -func (lt *LabelTask) Create(s *xorm.Session, _ web.Auth) (err error) { +func (lt *LabelTask) Create(s *xorm.Session, auth web.Auth) (err error) { // Check if the label is already added exists, err := s.Exist(&LabelTask{LabelID: lt.LabelID, TaskID: lt.TaskID}) if err != nil { @@ -100,6 +101,20 @@ func (lt *LabelTask) Create(s *xorm.Session, _ web.Auth) (err error) { return err } + t, err := GetTaskByIDSimple(s, lt.TaskID) + if err != nil { + return err + } + + doer, _ := user.GetFromAuth(auth) + err = events.Dispatch(&TaskUpdatedEvent{ + Task: &t, + Doer: doer, + }) + if err != nil { + return err + } + err = updateProjectByTaskID(s, lt.TaskID) return } diff --git a/pkg/models/task_assignees.go b/pkg/models/task_assignees.go index 33ae16882..bf786cc0b 100644 --- a/pkg/models/task_assignees.go +++ b/pkg/models/task_assignees.go @@ -280,6 +280,13 @@ func (t *Task) addNewAssigneeByID(s *xorm.Session, newAssigneeID int64, project if err != nil { return err } + err = events.Dispatch(&TaskUpdatedEvent{ + Task: t, + Doer: doer, + }) + if err != nil { + return err + } err = updateProjectLastUpdated(s, &Project{ID: t.ProjectID}) return