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
|
def update_last_seen
|
||||||
@conversation.agent_last_seen_at = DateTime.now.utc
|
@conversation.agent_last_seen_at = DateTime.now.utc
|
||||||
|
@conversation.assignee_last_seen_at = DateTime.now.utc if assignee?
|
||||||
@conversation.save!
|
@conversation.save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -136,4 +137,8 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
|
||||||
def conversation_finder
|
def conversation_finder
|
||||||
@conversation_finder ||= ConversationFinder.new(current_user, params)
|
@conversation_finder ||= ConversationFinder.new(current_user, params)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def assignee?
|
||||||
|
@conversation.assignee_id? && current_user == @conversation.assignee
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# additional_attributes :jsonb
|
# additional_attributes :jsonb
|
||||||
# agent_last_seen_at :datetime
|
# agent_last_seen_at :datetime
|
||||||
|
# assignee_last_seen_at :datetime
|
||||||
# contact_last_seen_at :datetime
|
# contact_last_seen_at :datetime
|
||||||
# custom_attributes :jsonb
|
# custom_attributes :jsonb
|
||||||
# identifier :string
|
# identifier :string
|
||||||
|
|
|
@ -4,6 +4,7 @@ json.meta do
|
||||||
json.contact @conversation.contact.push_event_data
|
json.contact @conversation.contact.push_event_data
|
||||||
json.assignee @conversation.assignee.push_event_data if @conversation.assignee.present?
|
json.assignee @conversation.assignee.push_event_data if @conversation.assignee.present?
|
||||||
json.agent_last_seen_at @conversation.agent_last_seen_at
|
json.agent_last_seen_at @conversation.agent_last_seen_at
|
||||||
|
json.assignee_last_seen_at @conversation.assignee_last_seen_at
|
||||||
end
|
end
|
||||||
|
|
||||||
json.payload do
|
json.payload do
|
||||||
|
|
|
@ -31,6 +31,7 @@ json.can_reply conversation.can_reply?
|
||||||
json.timestamp conversation.last_activity_at.to_i
|
json.timestamp conversation.last_activity_at.to_i
|
||||||
json.contact_last_seen_at conversation.contact_last_seen_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.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.unread_count conversation.unread_incoming_messages.count
|
||||||
json.additional_attributes conversation.additional_attributes
|
json.additional_attributes conversation.additional_attributes
|
||||||
json.custom_attributes conversation.custom_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.
|
# 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
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "pg_stat_statements"
|
enable_extension "pg_stat_statements"
|
||||||
|
@ -296,6 +296,7 @@ ActiveRecord::Schema.define(version: 2021_09_16_060144) do
|
||||||
t.bigint "campaign_id"
|
t.bigint "campaign_id"
|
||||||
t.datetime "snoozed_until"
|
t.datetime "snoozed_until"
|
||||||
t.jsonb "custom_attributes", default: {}
|
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", "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 ["account_id"], name: "index_conversations_on_account_id"
|
||||||
t.index ["assignee_id", "account_id"], name: "index_conversations_on_assignee_id_and_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(response).to have_http_status(:success)
|
||||||
expect(conversation.reload.agent_last_seen_at).not_to eq nil
|
expect(conversation.reload.agent_last_seen_at).not_to eq nil
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue