feat: Add assignee last seen to conversations (#3069)
- Adds assignee last seen attribute to conversations
This commit is contained in:
parent
4f51a46c2b
commit
54bdb2957f
7 changed files with 28 additions and 1 deletions
|
@ -69,6 +69,7 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||
|
||||
def update_last_seen
|
||||
@conversation.agent_last_seen_at = DateTime.now.utc
|
||||
@conversation.assignee_last_seen_at = DateTime.now.utc if assignee?
|
||||
@conversation.save!
|
||||
end
|
||||
|
||||
|
@ -136,4 +137,8 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
|||
def conversation_finder
|
||||
@conversation_finder ||= ConversationFinder.new(current_user, params)
|
||||
end
|
||||
|
||||
def assignee?
|
||||
@conversation.assignee_id? && current_user == @conversation.assignee
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
# id :integer not null, primary key
|
||||
# additional_attributes :jsonb
|
||||
# agent_last_seen_at :datetime
|
||||
# assignee_last_seen_at :datetime
|
||||
# contact_last_seen_at :datetime
|
||||
# custom_attributes :jsonb
|
||||
# identifier :string
|
||||
|
|
|
@ -4,6 +4,7 @@ json.meta do
|
|||
json.contact @conversation.contact.push_event_data
|
||||
json.assignee @conversation.assignee.push_event_data if @conversation.assignee.present?
|
||||
json.agent_last_seen_at @conversation.agent_last_seen_at
|
||||
json.assignee_last_seen_at @conversation.assignee_last_seen_at
|
||||
end
|
||||
|
||||
json.payload do
|
||||
|
|
|
@ -31,6 +31,7 @@ json.can_reply conversation.can_reply?
|
|||
json.timestamp conversation.last_activity_at.to_i
|
||||
json.contact_last_seen_at conversation.contact_last_seen_at.to_i
|
||||
json.agent_last_seen_at conversation.agent_last_seen_at.to_i
|
||||
json.assignee_last_seen_at conversation.assignee_last_seen_at.to_i
|
||||
json.unread_count conversation.unread_incoming_messages.count
|
||||
json.additional_attributes conversation.additional_attributes
|
||||
json.custom_attributes conversation.custom_attributes
|
||||
|
|
5
db/migrate/20210922082754_add_assignee_last_seen.rb
Normal file
5
db/migrate/20210922082754_add_assignee_last_seen.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AddAssigneeLastSeen < ActiveRecord::Migration[6.1]
|
||||
def change
|
||||
add_column :conversations, :assignee_last_seen_at, :datetime
|
||||
end
|
||||
end
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2021_09_16_060144) do
|
||||
ActiveRecord::Schema.define(version: 2021_09_22_082754) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "pg_stat_statements"
|
||||
|
@ -296,6 +296,7 @@ ActiveRecord::Schema.define(version: 2021_09_16_060144) do
|
|||
t.bigint "campaign_id"
|
||||
t.datetime "snoozed_until"
|
||||
t.jsonb "custom_attributes", default: {}
|
||||
t.datetime "assignee_last_seen_at"
|
||||
t.index ["account_id", "display_id"], name: "index_conversations_on_account_id_and_display_id", unique: true
|
||||
t.index ["account_id"], name: "index_conversations_on_account_id"
|
||||
t.index ["assignee_id", "account_id"], name: "index_conversations_on_assignee_id_and_account_id"
|
||||
|
|
|
@ -393,6 +393,19 @@ RSpec.describe 'Conversations API', type: :request do
|
|||
expect(response).to have_http_status(:success)
|
||||
expect(conversation.reload.agent_last_seen_at).not_to eq nil
|
||||
end
|
||||
|
||||
it 'updates assignee last seen' do
|
||||
conversation.update!(assignee_id: agent.id)
|
||||
|
||||
expect(conversation.reload.assignee_last_seen_at).to eq nil
|
||||
|
||||
post "/api/v1/accounts/#{account.id}/conversations/#{conversation.display_id}/update_last_seen",
|
||||
headers: agent.create_new_auth_token,
|
||||
as: :json
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
expect(conversation.reload.assignee_last_seen_at).not_to eq nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue