diff --git a/enterprise/app/controllers/api/v1/accounts/captain/faq_suggestions_controller.rb b/enterprise/app/controllers/api/v1/accounts/captain/faq_suggestions_controller.rb index 67b834d62..4dc1b2c62 100644 --- a/enterprise/app/controllers/api/v1/accounts/captain/faq_suggestions_controller.rb +++ b/enterprise/app/controllers/api/v1/accounts/captain/faq_suggestions_controller.rb @@ -1,6 +1,6 @@ class Api::V1::Accounts::Captain::FaqSuggestionsController < Api::V1::Accounts::BaseController before_action :current_account - before_action -> { check_authorization(Captain::Assistant) } + before_action :check_admin_authorization? before_action :set_suggestions before_action :set_suggestion, except: [:index] @@ -23,9 +23,11 @@ class Api::V1::Accounts::Captain::FaqSuggestionsController < Api::V1::Accounts:: end def update - raise ActiveRecord::RecordNotFound unless @suggestion.open? + @suggestion.with_lock do + raise ActiveRecord::RecordNotFound unless @suggestion.open? - @suggestion.update!(suggestion_params) + @suggestion.update!(suggestion_params) + end end def approve @@ -34,9 +36,11 @@ class Api::V1::Accounts::Captain::FaqSuggestionsController < Api::V1::Accounts:: end def dismiss - raise ActiveRecord::RecordNotFound unless @suggestion.open? + @suggestion.with_lock do + raise ActiveRecord::RecordNotFound unless @suggestion.open? - @suggestion.dismissed! + @suggestion.dismissed! + end end private diff --git a/enterprise/app/policies/captain/assistant_policy.rb b/enterprise/app/policies/captain/assistant_policy.rb index 90d2118f0..573c0400c 100644 --- a/enterprise/app/policies/captain/assistant_policy.rb +++ b/enterprise/app/policies/captain/assistant_policy.rb @@ -31,14 +31,6 @@ class Captain::AssistantPolicy < ApplicationPolicy @account_user.administrator? end - def approve? - update? - end - - def dismiss? - update? - end - def destroy? @account_user.administrator? end diff --git a/enterprise/app/services/captain/llm/conversation_faq_service.rb b/enterprise/app/services/captain/llm/conversation_faq_service.rb index 44c9f1960..9b188616d 100644 --- a/enterprise/app/services/captain/llm/conversation_faq_service.rb +++ b/enterprise/app/services/captain/llm/conversation_faq_service.rb @@ -85,6 +85,8 @@ class Captain::Llm::ConversationFaqService < Llm::BaseAiService def attach_observation(suggestion, faq) suggestion.with_lock do + next unless suggestion.open? + existing_observation = suggestion.observations.find_by(conversation: conversation) next existing_observation if existing_observation diff --git a/spec/enterprise/policies/captain/assistant_policy_spec.rb b/spec/enterprise/policies/captain/assistant_policy_spec.rb index 42206e234..e04b680e4 100644 --- a/spec/enterprise/policies/captain/assistant_policy_spec.rb +++ b/spec/enterprise/policies/captain/assistant_policy_spec.rb @@ -22,7 +22,7 @@ RSpec.describe Captain::AssistantPolicy, type: :policy do end end - permissions :tools?, :create?, :update?, :approve?, :dismiss?, :destroy?, :sync?, :drilldown? do + permissions :tools?, :create?, :update?, :destroy?, :sync?, :drilldown? do context 'when administrator' do it { expect(assistant_policy).to permit(administrator_context, assistant) } end