Merge branch 'develop' into codex/linear-mention-cw-5548-cannot-create-a-linear-ticket
This commit is contained in:
@@ -14,11 +14,19 @@ class ActionCableListener < BaseListener
|
||||
end
|
||||
|
||||
def notification_deleted(event)
|
||||
return if event.data[:notification].user.blank?
|
||||
notification_data = event.data[:notification_data]
|
||||
|
||||
notification, account, unread_count, count = extract_notification_and_account(event)
|
||||
tokens = [event.data[:notification].user.pubsub_token]
|
||||
broadcast(account, tokens, NOTIFICATION_DELETED, { notification: { id: notification.id }, unread_count: unread_count, count: count })
|
||||
user = User.find_by(id: notification_data[:user_id])
|
||||
account = Account.find_by(id: notification_data[:account_id])
|
||||
return if user.blank? || account.blank?
|
||||
|
||||
notification_finder = NotificationFinder.new(user, account)
|
||||
tokens = [user.pubsub_token]
|
||||
broadcast(account, tokens, NOTIFICATION_DELETED, {
|
||||
notification: { id: notification_data[:id] },
|
||||
unread_count: notification_finder.unread_count,
|
||||
count: notification_finder.count
|
||||
})
|
||||
end
|
||||
|
||||
def account_cache_invalidated(event)
|
||||
|
||||
@@ -180,7 +180,17 @@ class Notification < ApplicationRecord
|
||||
end
|
||||
|
||||
def dispatch_destroy_event
|
||||
Rails.configuration.dispatcher.dispatch(NOTIFICATION_DELETED, Time.zone.now, notification: self)
|
||||
# Pass serialized data instead of ActiveRecord object to avoid DeserializationError
|
||||
# when the async EventDispatcherJob runs after the notification has been deleted
|
||||
Rails.configuration.dispatcher.dispatch(
|
||||
NOTIFICATION_DELETED,
|
||||
Time.zone.now,
|
||||
notification_data: {
|
||||
id: id,
|
||||
user_id: user_id,
|
||||
account_id: account_id
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
def set_last_activity_at
|
||||
|
||||
@@ -19,7 +19,7 @@ class Captain::Llm::PaginatedFaqGeneratorService < Llm::LegacyBaseOpenAiService
|
||||
end
|
||||
|
||||
def generate
|
||||
raise CustomExceptions::PdfFaqGenerationError, I18n.t('captain.documents.missing_openai_file_id') if @document&.openai_file_id.blank?
|
||||
raise CustomExceptions::Pdf::FaqGenerationError, I18n.t('captain.documents.missing_openai_file_id') if @document&.openai_file_id.blank?
|
||||
|
||||
generate_paginated_faqs
|
||||
end
|
||||
|
||||
@@ -10,7 +10,7 @@ class Captain::Llm::PdfProcessingService < Llm::LegacyBaseOpenAiService
|
||||
return if document.openai_file_id.present?
|
||||
|
||||
file_id = upload_pdf_to_openai
|
||||
raise CustomExceptions::PdfUploadError, I18n.t('captain.documents.pdf_upload_failed') if file_id.blank?
|
||||
raise CustomExceptions::Pdf::UploadError, I18n.t('captain.documents.pdf_upload_failed') if file_id.blank?
|
||||
|
||||
document.store_openai_file_id(file_id)
|
||||
end
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
module CustomExceptions::Pdf
|
||||
class UploadError < CustomExceptions::Base
|
||||
def initialize(message = 'PDF upload failed')
|
||||
super(message)
|
||||
end
|
||||
end
|
||||
|
||||
class ValidationError < CustomExceptions::Base
|
||||
def initialize(message = 'PDF validation failed')
|
||||
super(message)
|
||||
end
|
||||
end
|
||||
|
||||
class FaqGenerationError < CustomExceptions::Base
|
||||
def initialize(message = 'PDF FAQ generation failed')
|
||||
super(message)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,25 +0,0 @@
|
||||
module CustomExceptions
|
||||
class PdfProcessingError < Base
|
||||
def initialize(message = 'PDF processing failed')
|
||||
super(message)
|
||||
end
|
||||
end
|
||||
|
||||
class PdfUploadError < PdfProcessingError
|
||||
def initialize(message = 'PDF upload failed')
|
||||
super(message)
|
||||
end
|
||||
end
|
||||
|
||||
class PdfValidationError < PdfProcessingError
|
||||
def initialize(message = 'PDF validation failed')
|
||||
super(message)
|
||||
end
|
||||
end
|
||||
|
||||
class PdfFaqGenerationError < PdfProcessingError
|
||||
def initialize(message = 'PDF FAQ generation failed')
|
||||
super(message)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,5 +1,4 @@
|
||||
require 'rails_helper'
|
||||
require 'custom_exceptions/pdf_processing_error'
|
||||
|
||||
RSpec.describe Captain::Llm::PaginatedFaqGeneratorService do
|
||||
let(:document) { create(:captain_document) }
|
||||
@@ -23,7 +22,7 @@ RSpec.describe Captain::Llm::PaginatedFaqGeneratorService do
|
||||
end
|
||||
|
||||
it 'raises an error' do
|
||||
expect { service.generate }.to raise_error(CustomExceptions::PdfFaqGenerationError)
|
||||
expect { service.generate }.to raise_error(CustomExceptions::Pdf::FaqGenerationError)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
require 'rails_helper'
|
||||
require 'custom_exceptions/pdf_processing_error'
|
||||
|
||||
RSpec.describe Captain::Llm::PdfProcessingService do
|
||||
let(:document) { create(:captain_document) }
|
||||
@@ -52,7 +51,7 @@ RSpec.describe Captain::Llm::PdfProcessingService do
|
||||
it 'raises error when upload fails' do
|
||||
allow(mock_client.files).to receive(:upload).and_return({ 'id' => nil })
|
||||
|
||||
expect { service.process }.to raise_error(CustomExceptions::PdfUploadError)
|
||||
expect { service.process }.to raise_error(CustomExceptions::Pdf::UploadError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -132,7 +132,14 @@ describe ActionCableListener do
|
||||
describe '#notification_deleted' do
|
||||
let(:event_name) { :'notification.deleted' }
|
||||
let!(:notification) { create(:notification, account: account, user: agent) }
|
||||
let!(:event) { Events::Base.new(event_name, Time.zone.now, notification: notification) }
|
||||
let(:notification_data) do
|
||||
{
|
||||
id: notification.id,
|
||||
user_id: agent.id,
|
||||
account_id: account.id
|
||||
}
|
||||
end
|
||||
let!(:event) { Events::Base.new(event_name, Time.zone.now, notification_data: notification_data) }
|
||||
|
||||
it 'sends message to account admins, inbox agents' do
|
||||
expect(ActionCableBroadcastJob).to receive(:perform_later).with(
|
||||
|
||||
Reference in New Issue
Block a user