chore: API improvements (#3637)

- Unique validations for Inbox members and Team member objects
- Move notification processing to Async
This commit is contained in:
Sojan Jose
2021-12-21 22:48:01 +05:30
committed by GitHub
parent 262474166f
commit 009abc1948
13 changed files with 48 additions and 31 deletions

View File

@@ -1,11 +1,11 @@
class Api::V1::Accounts::InboxMembersController < Api::V1::Accounts::BaseController
before_action :fetch_inbox
before_action :current_agents_ids, only: [:update]
before_action :current_agents_ids, only: [:create, :update]
def create
authorize @inbox, :create?
ActiveRecord::Base.transaction do
params[:user_ids].map { |user_id| @inbox.add_member(user_id) }
agents_to_be_added_ids.map { |user_id| @inbox.add_member(user_id) }
end
fetch_updated_agents
end

View File

@@ -8,7 +8,7 @@ class Api::V1::Accounts::TeamMembersController < Api::V1::Accounts::BaseControll
def create
ActiveRecord::Base.transaction do
@team_members = params[:user_ids].map { |user_id| @team.add_member(user_id) }
@team_members = members_to_be_added_ids.map { |user_id| @team.add_member(user_id) }
end
end

View File

@@ -15,6 +15,7 @@ class AsyncDispatcher < BaseDispatcher
EventListener.instance,
HookListener.instance,
InstallationWebhookListener.instance,
NotificationListener.instance,
WebhookListener.instance
]
end

View File

@@ -5,6 +5,6 @@ class SyncDispatcher < BaseDispatcher
end
def listeners
[ActionCableListener.instance, AgentBotListener.instance, NotificationListener.instance]
[ActionCableListener.instance, AgentBotListener.instance]
end
end

View File

@@ -3,7 +3,7 @@ class Inboxes::FetchImapEmailInboxesJob < ApplicationJob
def perform
Inbox.where(channel_type: 'Channel::Email').all.each do |inbox|
Inboxes::FetchImapEmailsJob.perform_later(inbox.channel) if inbox.channel.imap_enabled
::Inboxes::FetchImapEmailsJob.perform_later(inbox.channel) if inbox.channel.imap_enabled
end
end
end

View File

@@ -24,7 +24,7 @@ module ActivityMessageHandler
I18n.t('conversations.activity.status.auto_resolved', duration: auto_resolve_duration)
end
Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
end
def create_label_added(user_name, labels = [])
@@ -33,7 +33,7 @@ module ActivityMessageHandler
params = { user_name: user_name, labels: labels.join(', ') }
content = I18n.t('conversations.activity.labels.added', **params)
Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
end
def create_label_removed(user_name, labels = [])
@@ -42,7 +42,7 @@ module ActivityMessageHandler
params = { user_name: user_name, labels: labels.join(', ') }
content = I18n.t('conversations.activity.labels.removed', **params)
Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
end
def create_muted_message
@@ -51,7 +51,7 @@ module ActivityMessageHandler
params = { user_name: Current.user.name }
content = I18n.t('conversations.activity.muted', **params)
Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
end
def create_unmuted_message
@@ -60,7 +60,7 @@ module ActivityMessageHandler
params = { user_name: Current.user.name }
content = I18n.t('conversations.activity.unmuted', **params)
Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
end
def generate_team_change_activity_key
@@ -82,7 +82,7 @@ module ActivityMessageHandler
params[:team_name] = generate_team_name_for_activity if key == 'removed'
content = I18n.t("conversations.activity.team.#{key}", **params)
Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
end
def generate_assignee_change_activity_content(user_name)
@@ -96,6 +96,6 @@ module ActivityMessageHandler
return unless user_name
content = generate_assignee_change_activity_content(user_name)
Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
end
end

View File

@@ -10,12 +10,14 @@
#
# Indexes
#
# index_inbox_members_on_inbox_id (inbox_id)
# index_inbox_members_on_inbox_id (inbox_id)
# index_inbox_members_on_inbox_id_and_user_id (inbox_id,user_id) UNIQUE
#
class InboxMember < ApplicationRecord
validates :inbox_id, presence: true
validates :user_id, presence: true
validates :user_id, uniqueness: { scope: :inbox_id }
belongs_to :user
belongs_to :inbox

View File

@@ -22,4 +22,5 @@
class TeamMember < ApplicationRecord
belongs_to :user
belongs_to :team
validates :user_id, uniqueness: { scope: :team_id }
end