From 18ae7b95d66e582b02d7bcb313da923751acf8dd Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Tue, 16 Jun 2026 15:58:42 +0530 Subject: [PATCH] make updateAssignee private so user assignment can't skip hooks --- internal/conversation/conversation.go | 46 +++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/internal/conversation/conversation.go b/internal/conversation/conversation.go index 2829b161..6c122285 100644 --- a/internal/conversation/conversation.go +++ b/internal/conversation/conversation.go @@ -680,7 +680,7 @@ func (c *Manager) UpdateConversationWaitingSince(conversationUUID string, at *ti // UpdateConversationUserAssignee sets the assignee of a conversation to a specifc user. func (c *Manager) UpdateConversationUserAssignee(uuid string, assigneeID int, actor umodels.User) error { - if err := c.UpdateAssignee(uuid, assigneeID, models.AssigneeTypeUser); err != nil { + if err := c.updateAssignee(uuid, assigneeID, models.AssigneeTypeUser); err != nil { return envelope.NewError(envelope.GeneralError, c.i18n.T("globals.messages.somethingWentWrong"), nil) } return c.afterUserAssigned(uuid, assigneeID, actor) @@ -760,7 +760,7 @@ func (c *Manager) UpdateConversationTeamAssignee(uuid string, teamID int, actor } previousAssignedTeamID := conversation.AssignedTeamID.Int - if err := c.UpdateAssignee(uuid, teamID, models.AssigneeTypeTeam); err != nil { + if err := c.updateAssignee(uuid, teamID, models.AssigneeTypeTeam); err != nil { return envelope.NewError(envelope.GeneralError, c.i18n.T("globals.messages.somethingWentWrong"), nil) } @@ -806,27 +806,6 @@ func (c *Manager) UpdateConversationTeamAssignee(uuid string, teamID int, actor return nil } -// UpdateAssignee updates the assignee of a conversation. -func (c *Manager) UpdateAssignee(uuid string, assigneeID int, assigneeType string) error { - prev, prevErr := c.GetConversationListItem(uuid) - switch assigneeType { - case models.AssigneeTypeUser: - if _, err := c.q.UpdateConversationAssignedUser.Exec(uuid, assigneeID); err != nil { - c.lo.Error("error updating conversation assignee", "error", err) - return fmt.Errorf("updating assignee: %w", err) - } - case models.AssigneeTypeTeam: - if _, err := c.q.UpdateConversationAssignedTeam.Exec(uuid, assigneeID); err != nil { - c.lo.Error("error updating conversation assignee", "error", err) - return fmt.Errorf("updating assignee: %w", err) - } - default: - return fmt.Errorf("invalid assignee type: %s", assigneeType) - } - c.broadcastReassignment(uuid, prev, prevErr) - return nil -} - // broadcastReassignment broadcasts a reassignment to agents, given the conversation's prior list item. func (c *Manager) broadcastReassignment(uuid string, prev models.ConversationListItem, prevErr error) { next, nextErr := c.GetConversationListItem(uuid) @@ -1970,6 +1949,27 @@ func (c *Manager) FilterAuthorizedListUUIDs(agentID int, uuids []string) ([]stri return authorized, nil } +// updateAssignee updates the assignee of a conversation. +func (c *Manager) updateAssignee(uuid string, assigneeID int, assigneeType string) error { + prev, prevErr := c.GetConversationListItem(uuid) + switch assigneeType { + case models.AssigneeTypeUser: + if _, err := c.q.UpdateConversationAssignedUser.Exec(uuid, assigneeID); err != nil { + c.lo.Error("error updating conversation assignee", "error", err) + return fmt.Errorf("updating assignee: %w", err) + } + case models.AssigneeTypeTeam: + if _, err := c.q.UpdateConversationAssignedTeam.Exec(uuid, assigneeID); err != nil { + c.lo.Error("error updating conversation assignee", "error", err) + return fmt.Errorf("updating assignee: %w", err) + } + default: + return fmt.Errorf("invalid assignee type: %s", assigneeType) + } + c.broadcastReassignment(uuid, prev, prevErr) + return nil +} + func nullTimeOrNil(t null.Time) any { if !t.Valid || t.Time.IsZero() { return nil