Skip to content

Commit

Permalink
index prefixes directly not in job datacite/bracco#422
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin Fenner committed Sep 27, 2020
1 parent b08c6e4 commit ecca582
Show file tree
Hide file tree
Showing 7 changed files with 116 additions and 39 deletions.
13 changes: 11 additions & 2 deletions app/controllers/client_prefixes_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,10 @@ def create
@client_prefix = ClientPrefix.new(safe_params)
authorize! :create, @client_prefix

if @client_prefix.save
if @client_prefix.save && @client_prefix.__elasticsearch__.index_document.dig("result") == "created"
@client_prefix.provider_prefix.__elasticsearch__.index_document
@client_prefix.prefix.__elasticsearch__.index_document

options = {}
options[:include] = @include
options[:is_collection] = false
Expand All @@ -103,7 +106,13 @@ def update

def destroy
message = "Client prefix #{@client_prefix.uid} deleted."
if @client_prefix.destroy

# first delete document from Elasticsearch and reindex parent documents
if @client_prefix.__elasticsearch__.delete_document.dig("result") == "deleted" &&
@client_prefix.prefix.__elasticsearch__.index_document &&
@client_prefix.provider_prefix.__elasticsearch__.index_document &&
@client_prefix.destroy

Rails.logger.warn message
head :no_content
else
Expand Down
12 changes: 10 additions & 2 deletions app/controllers/provider_prefixes_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,9 @@ def create
@provider_prefix = ProviderPrefix.new(safe_params)
authorize! :create, @provider_prefix

if @provider_prefix.save
if @provider_prefix.save && @provider_prefix.__elasticsearch__.index_document.dig("result") == "created"
@provider_prefix.prefix.__elasticsearch__.index_document

options = {}
options[:include] = @include
options[:is_collection] = false
Expand All @@ -103,7 +105,13 @@ def update

def destroy
message = "Provider prefix #{@provider_prefix.uid} deleted."
if @provider_prefix.destroy

# first delete document from Elasticsearch and reindex parent documents
if @provider_prefix.__elasticsearch__.delete_document.dig("result") == "deleted" &&
@provider_prefix.prefix.__elasticsearch__.index_document &&
@provider_prefix.provider.__elasticsearch__.index_document &&
@provider_prefix.destroy

Rails.logger.warn message
head :no_content
else
Expand Down
19 changes: 3 additions & 16 deletions app/models/concerns/indexable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,42 +6,29 @@ module Indexable
included do
after_commit on: [:create, :update] do
# use index_document instead of update_document to also update virtual attributes
IndexJob.perform_later(self)
IndexJob.perform_later(self) unless ["ProviderPrefix", "ClientPrefix"].include?(self.class.name)

if (self.class.name == "DataciteDoi" || self.class.name == "OtherDoi" || self.class.name == "Doi") && (saved_change_to_attribute?("related_identifiers") || saved_change_to_attribute?("creators") || saved_change_to_attribute?("funding_references"))
send_import_message(self.to_jsonapi) if aasm_state == "findable" && !Rails.env.test?
elsif self.class.name == "Event"
OtherDoiJob.perform_later(self.dois_to_import)
elsif ["ProviderPrefix", "ClientPrefix"].include?(self.class.name)
# reindex prefix, not triggered by standard callbacks
IndexJob.perform_later(self.prefix)
end
end

after_touch do
# use index_document instead of update_document to also update virtual attributes
# prefixes need to be reindexed immediately
if ["Prefix", "ProviderPrefix", "ClientPrefix"].include?(self.class.name)
IndexJob.perform_later(self)
else
IndexBackgroundJob.perform_later(self)
end
IndexBackgroundJob.perform_later(self)
end

after_commit on: [:destroy] do
begin
__elasticsearch__.delete_document
if self.class.name == "Event"
Rails.logger.warn "#{self.class.name} #{uuid} deleted from Elasticsearch index."
else
elsif !["ProviderPrefix", "ClientPrefix"].include?(self.class.name)
Rails.logger.warn "#{self.class.name} #{uid} deleted from Elasticsearch index."
end
# send_delete_message(self.to_jsonapi) if self.class.name == "Doi" && !Rails.env.test?

# reindex prefix
if ["ProviderPrefix", "ClientPrefix"].include?(self.class.name)
IndexJob.perform_later(self.prefix)
end
rescue Elasticsearch::Transport::Transport::Errors::NotFound => e
Rails.logger.error e.message
end
Expand Down
51 changes: 51 additions & 0 deletions spec/fixtures/vcr_cassettes/Doi/citations/has_citations.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions spec/requests/client_prefixes_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,18 @@
end
end
end

describe 'DELETE /client-prefixes/:uid' do
let!(:client_prefix) { create(:client_prefix) }

before do
ClientPrefix.import
sleep 2
end

it 'deletes the prefix' do
delete "/client-prefixes/#{client_prefix.uid}", nil, headers
expect(last_response.status).to eq(204)
end
end
end
14 changes: 14 additions & 0 deletions spec/requests/provider_prefixes_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -153,4 +153,18 @@
end
end
end

describe 'DELETE /provider-prefixes/:uid' do
let!(:provider_prefix) { create(:provider_prefix) }

before do
ProviderPrefix.import
sleep 2
end

it 'deletes the prefix' do
delete "/provider-prefixes/#{provider_prefix.uid}", nil, headers
expect(last_response.status).to eq(204)
end
end
end
32 changes: 13 additions & 19 deletions spec/requests/providers_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -822,23 +822,17 @@
end
end

# # Test suite for DELETE /providers/:id
# describe 'DELETE /providers/:id' do
# before { delete "/providers/#{provider.symbol}", headers: headers }

# it 'returns status code 204' do
# expect(response).to have_http_status(204)
# end
# context 'when the resources doesnt exist' do
# before { delete '/providers/xxx', params: params.to_json, headers: headers }

# it 'returns status code 404' do
# expect(response).to have_http_status(404)
# end

# it 'returns a validation failure message' do
# expect(json["errors"].first).to eq("status"=>"404", "title"=>"The resource you are looking for doesn't exist.")
# end
# end
# end
describe 'DELETE /providers/:id' do
let!(:provider) { create(:provider) }

before do
Provider.import
sleep 2
end

it 'deletes the provider' do
delete "/providers/#{provider.symbol.downcase}", nil, admin_headers
expect(last_response.status).to eq(204)
end
end
end

0 comments on commit ecca582

Please sign in to comment.