feat: Add assignee last seen to conversations (#3069)

- Adds assignee last seen attribute to conversations
This commit is contained in:
Tejaswini Chile 2021-09-23 20:59:10 +05:30 committed by GitHub
parent 4f51a46c2b
commit 54bdb2957f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 28 additions and 1 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,5 @@
class AddAssigneeLastSeen < ActiveRecord::Migration[6.1]
def change
add_column :conversations, :assignee_last_seen_at, :datetime
end
end

View file

@ -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"

View file

@ -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