1
0

fix(typesense): reindex tasks when their position changed

This commit is contained in:
kolaente 2024-07-11 12:07:48 +02:00
parent 0b424fe95e
commit 471d0fcd4a
No known key found for this signature in database
GPG Key ID: F40E70337AB24C9B
3 changed files with 52 additions and 1 deletions

View File

@ -166,6 +166,16 @@ func (t *TaskRelationDeletedEvent) Name() string {
return "task.relation.deleted"
}
// TaskPositionsRecalculatedEvent represents a TaskPositionsRecalculatedEvent event
type TaskPositionsRecalculatedEvent struct {
NewTaskPositions []*TaskPosition
}
// Name defines the name for TaskPositionsRecalculatedEvent
func (t *TaskPositionsRecalculatedEvent) Name() string {
return "task.positions.recalculated"
}
////////////////////
// Project Events //
////////////////////

View File

@ -70,6 +70,7 @@ func RegisterListeners() {
events.RegisterListener((&TaskDeletedEvent{}).Name(), &RemoveTaskFromTypesense{})
events.RegisterListener((&TaskCreatedEvent{}).Name(), &AddTaskToTypesense{})
events.RegisterListener((&TaskUpdatedEvent{}).Name(), &UpdateTaskInTypesense{})
events.RegisterListener((&TaskPositionsRecalculatedEvent{}).Name(), &UpdateTaskPositionsInTypesense{})
}
if config.WebhooksEnabled.GetBool() {
RegisterEventForWebhook(&TaskCreatedEvent{})
@ -607,6 +608,41 @@ func (l *UpdateTaskInTypesense) Handle(msg *message.Message) (err error) {
return reindexTasksInTypesense(s, task)
}
// UpdateTaskPositionsInTypesense represents a listener
type UpdateTaskPositionsInTypesense struct {
}
// Name defines the name for the UpdateTaskPositionsInTypesense listener
func (l *UpdateTaskPositionsInTypesense) Name() string {
return "typesense.task.position.update"
}
// Handle is executed when the event UpdateTaskPositionsInTypesense listens on is fired
func (l *UpdateTaskPositionsInTypesense) Handle(msg *message.Message) (err error) {
event := &TaskPositionsRecalculatedEvent{}
err = json.Unmarshal(msg.Payload, event)
if err != nil {
return err
}
taskIDs := []int64{}
for _, position := range event.NewTaskPositions {
taskIDs = append(taskIDs, position.TaskID)
}
s := db.NewSession()
defer s.Close()
tasks, err := GetTasksSimpleByIDs(s, taskIDs)
taskMap := make(map[int64]*Task, 1)
for _, task := range tasks {
taskMap[task.ID] = task
}
return reindexTasksInTypesense(s, taskMap)
}
// IncreaseAttachmentCounter represents a listener
type IncreaseAttachmentCounter struct {
}

View File

@ -166,7 +166,12 @@ func RecalculateTaskPositions(s *xorm.Session, view *ProjectView, a web.Auth) (e
}
_, err = s.Insert(newPositions)
return
if err != nil {
return
}
return events.Dispatch(&TaskPositionsRecalculatedEvent{
NewTaskPositions: newPositions,
})
}
func getPositionsForView(s *xorm.Session, view *ProjectView) (positions []*TaskPosition, err error) {