fix(events): defer task event dispatch until after transaction commit

Convert events.Dispatch to events.DispatchOnCommit in Task.Create,
updateSingleTask, Task.Delete, and triggerTaskUpdatedEventForTaskID.
Events are now dispatched by the handler after s.Commit(), ensuring
webhook listeners see committed data.

Fixes #2315
This commit is contained in:
kolaente 2026-03-02 09:11:32 +01:00
parent 217a481162
commit 3eb289262f
1 changed files with 5 additions and 14 deletions

View File

@ -961,13 +961,10 @@ func createTask(s *xorm.Session, t *Task, a web.Auth, updateAssignees bool, setB
}
}
err = events.Dispatch(&TaskCreatedEvent{
events.DispatchOnCommit(s, &TaskCreatedEvent{
Task: t,
Doer: createdBy,
})
if err != nil {
return err
}
err = updateProjectLastUpdated(s, &Project{ID: t.ProjectID})
return
@ -1381,13 +1378,10 @@ func (t *Task) updateSingleTask(s *xorm.Session, a web.Auth, fields []string) (e
t.Updated = nt.Updated
doer, _ := user.GetFromAuth(a)
err = events.Dispatch(&TaskUpdatedEvent{
events.DispatchOnCommit(s, &TaskUpdatedEvent{
Task: t,
Doer: doer,
})
if err != nil {
return err
}
return updateProjectLastUpdated(s, &Project{ID: t.ProjectID})
}
@ -1826,13 +1820,10 @@ func (t *Task) Delete(s *xorm.Session, a web.Auth) (err error) {
}
doer, _ := user.GetFromAuth(a)
err = events.Dispatch(&TaskDeletedEvent{
events.DispatchOnCommit(s, &TaskDeletedEvent{
Task: fullTask,
Doer: doer,
})
if err != nil {
return
}
err = updateProjectLastUpdated(s, &Project{ID: t.ProjectID})
return
@ -1897,9 +1888,9 @@ func triggerTaskUpdatedEventForTaskID(s *xorm.Session, auth web.Auth, taskID int
}
doer, _ := user.GetFromAuth(auth)
err = events.Dispatch(&TaskUpdatedEvent{
events.DispatchOnCommit(s, &TaskUpdatedEvent{
Task: &t,
Doer: doer,
})
return err
return nil
}