Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
88 lines
2.4 KiB
Ruby
88 lines
2.4 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: sla_events
|
|
#
|
|
# id :bigint not null, primary key
|
|
# event_type :integer
|
|
# meta :jsonb
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# account_id :bigint not null
|
|
# applied_sla_id :bigint not null
|
|
# conversation_id :bigint not null
|
|
# inbox_id :bigint not null
|
|
# sla_policy_id :bigint not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_sla_events_on_account_id (account_id)
|
|
# index_sla_events_on_applied_sla_id (applied_sla_id)
|
|
# index_sla_events_on_conversation_id (conversation_id)
|
|
# index_sla_events_on_inbox_id (inbox_id)
|
|
# index_sla_events_on_sla_policy_id (sla_policy_id)
|
|
#
|
|
class SlaEvent < ApplicationRecord
|
|
belongs_to :account
|
|
belongs_to :inbox
|
|
belongs_to :conversation
|
|
belongs_to :sla_policy
|
|
belongs_to :applied_sla
|
|
|
|
enum event_type: { frt: 0, nrt: 1, rt: 2 }
|
|
|
|
before_validation :ensure_applied_sla_id, :ensure_account_id, :ensure_inbox_id, :ensure_sla_policy_id
|
|
after_create_commit :create_notifications
|
|
|
|
def push_event_data
|
|
{
|
|
id: id,
|
|
event_type: event_type,
|
|
meta: meta,
|
|
created_at: created_at.to_i,
|
|
updated_at: updated_at.to_i
|
|
}
|
|
end
|
|
|
|
private
|
|
|
|
def ensure_applied_sla_id
|
|
self.applied_sla_id ||= AppliedSla.find_by(conversation_id: conversation_id)&.last&.id
|
|
end
|
|
|
|
def ensure_account_id
|
|
self.account_id ||= conversation&.account_id
|
|
end
|
|
|
|
def ensure_inbox_id
|
|
self.inbox_id ||= conversation&.inbox_id
|
|
end
|
|
|
|
def ensure_sla_policy_id
|
|
self.sla_policy_id ||= applied_sla&.sla_policy_id
|
|
end
|
|
|
|
def create_notifications
|
|
notify_users = conversation.conversation_participants.map(&:user)
|
|
# Add all admins from the account to notify list
|
|
notify_users += account.administrators
|
|
# Ensure conversation assignee is notified
|
|
notify_users += [conversation.assignee] if conversation.assignee.present?
|
|
|
|
notification_type = {
|
|
'frt' => 'sla_missed_first_response',
|
|
'nrt' => 'sla_missed_next_response',
|
|
'rt' => 'sla_missed_resolution'
|
|
}[event_type]
|
|
|
|
notify_users.uniq.each do |user|
|
|
NotificationBuilder.new(
|
|
notification_type: notification_type,
|
|
user: user,
|
|
account: account,
|
|
primary_actor: conversation,
|
|
secondary_actor: sla_policy
|
|
).perform
|
|
end
|
|
end
|
|
end
|