feat(conversations): expose inbox assistant
This commit is contained in:
@@ -161,6 +161,29 @@ func (s *ConversationService) GetByAccountAndDisplayIDOrID(ctx context.Context,
|
||||
return s.repo.FindByAccountAndDisplayIDOrID(ctx, accountID, routeID)
|
||||
}
|
||||
|
||||
// GetInboxAssistant returns the Captain assistant connected to the conversation's inbox.
|
||||
// Reference: Chatwoot enterprise ConversationsController#inbox_assistant.
|
||||
func (s *ConversationService) GetInboxAssistant(ctx context.Context, accountID, routeID uint) (*model.CaptainAssistant, error) {
|
||||
conversation, err := s.repo.FindByAccountAndDisplayIDOrID(ctx, accountID, routeID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var assistant model.CaptainAssistant
|
||||
err = s.repo.DB().WithContext(ctx).
|
||||
Joins("JOIN captain_inboxes ON captain_inboxes.captain_assistant_id = captain_assistants.id").
|
||||
Where("captain_inboxes.account_id = ? AND captain_inboxes.inbox_id = ? AND captain_assistants.account_id = ?", accountID, conversation.InboxID, accountID).
|
||||
Order("captain_inboxes.id DESC").
|
||||
First(&assistant).Error
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, nil
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &assistant, nil
|
||||
}
|
||||
|
||||
// CreateConversationRequest is the DTO for creating a conversation.
|
||||
// Reference: Chatwoot app/controllers/api/v1/accounts/conversations_controller.rb #create
|
||||
// Supports creating conversation with an initial message (like Chatwoot's ConversationBuilder).
|
||||
|
||||
Reference in New Issue
Block a user