Skip to content

Commit

Permalink
remove associations for versions and parts. #438. #439
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin Fenner committed Mar 31, 2020
1 parent 628bfb0 commit 918f691
Show file tree
Hide file tree
Showing 7 changed files with 258 additions and 185 deletions.
2 changes: 1 addition & 1 deletion app/controllers/dois_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ def set_include
if params[:include].present?
@include = params[:include].split(",").map { |i| i.downcase.underscore.to_sym }

@include = @include & [:client, :media, :references, :citations, :versions, :version_of, :parts, :part_of]
@include = @include & [:client, :media, :references, :citations]
else
@include = []
end
Expand Down
2 changes: 2 additions & 0 deletions app/controllers/works_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ def set_include
"data_center" => :client,
"member" => :provider,
"resource_type" => :resource_type,
"references" => :references,
"citations" => :citations,
}
@include = params[:include].split(",").reduce([]) do |sum, i|
k = include_keys[i.downcase.underscore]
Expand Down
181 changes: 125 additions & 56 deletions app/models/doi.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,20 +76,20 @@ class Doi < ActiveRecord::Base
has_many :download_events, -> { where target_relation_type_id: "downloads" }, class_name: "Event", primary_key: :doi, foreign_key: :target_doi, dependent: :destroy
has_many :reference_events, -> { where source_relation_type_id: "references" }, class_name: "Event", primary_key: :doi, foreign_key: :source_doi, dependent: :destroy
has_many :citation_events, -> { where target_relation_type_id: "citations" }, class_name: "Event", primary_key: :doi, foreign_key: :target_doi, dependent: :destroy
has_many :part_events, -> { where source_relation_type_id: "parts" }, class_name: "Event", primary_key: :doi, foreign_key: :source_doi, dependent: :destroy
has_many :part_of_events, -> { where target_relation_type_id: "part_of" }, class_name: "Event", primary_key: :doi, foreign_key: :target_doi, dependent: :destroy
has_many :version_events, -> { where source_relation_type_id: "versions" }, class_name: "Event", primary_key: :doi, foreign_key: :source_doi, dependent: :destroy
has_many :version_of_events, -> { where target_relation_type_id: "version_of" }, class_name: "Event", primary_key: :doi, foreign_key: :target_doi, dependent: :destroy
# has_many :part_events, -> { where source_relation_type_id: "parts" }, class_name: "Event", primary_key: :doi, foreign_key: :source_doi, dependent: :destroy
# has_many :part_of_events, -> { where target_relation_type_id: "part_of" }, class_name: "Event", primary_key: :doi, foreign_key: :target_doi, dependent: :destroy
# has_many :version_events, -> { where source_relation_type_id: "versions" }, class_name: "Event", primary_key: :doi, foreign_key: :source_doi, dependent: :destroy
# has_many :version_of_events, -> { where target_relation_type_id: "version_of" }, class_name: "Event", primary_key: :doi, foreign_key: :target_doi, dependent: :destroy
has_many :activities, as: :auditable, dependent: :destroy
# has_many :source_events, class_name: "Event", primary_key: :doi, foreign_key: :source_doi, dependent: :destroy
# has_many :target_events, class_name: "Event", primary_key: :doi, foreign_key: :target_doi, dependent: :destroy

has_many :references, class_name: "Doi", through: :reference_events, source: :doi_for_target
has_many :citations, class_name: "Doi", through: :citation_events, source: :doi_for_source
has_many :parts, class_name: "Doi", through: :part_events, source: :doi_for_target
has_many :part_of, class_name: "Doi", through: :part_of_events, source: :doi_for_source
has_many :versions, class_name: "Doi", through: :version_events, source: :doi_for_target
has_many :version_of, class_name: "Doi", through: :version_of_events, source: :doi_for_source
# has_many :parts, class_name: "Doi", through: :part_events, source: :doi_for_target
# has_many :part_of, class_name: "Doi", through: :part_of_events, source: :doi_for_source
# has_many :versions, class_name: "Doi", through: :version_events, source: :doi_for_target
# has_many :version_of, class_name: "Doi", through: :version_of_events, source: :doi_for_source

delegate :provider, to: :client, allow_nil: true
delegate :consortium_id, to: :provider, allow_nil: true
Expand Down Expand Up @@ -424,25 +424,29 @@ class Doi < ActiveRecord::Base
indexes :download_count, type: :integer
indexes :reference_count, type: :integer
indexes :citation_count, type: :integer
indexes :part_count, type: :integer
indexes :part_of_count, type: :integer
indexes :version_count, type: :integer
indexes :version_of_count, type: :integer
# indexes :part_count, type: :integer
# indexes :part_of_count, type: :integer
# indexes :version_count, type: :integer
# indexes :version_of_count, type: :integer
indexes :views_over_time, type: :object
indexes :downloads_over_time, type: :object
indexes :citations_over_time, type: :object
indexes :part_ids, type: :keyword
indexes :part_of_ids, type: :keyword
indexes :version_ids, type: :keyword
indexes :version_of_ids, type: :keyword
# indexes :reference_event_ids, type: :keyword
# indexes :citation_event_ids, type: :keyword
# indexes :reference_events, type: :object
# indexes :citation_events, type: :object
# indexes :part_ids, type: :keyword
# indexes :part_of_ids, type: :keyword
# indexes :version_ids, type: :keyword
# indexes :version_of_ids, type: :keyword
indexes :reference_ids, type: :keyword
indexes :citation_ids, type: :keyword
indexes :references, type: :object
indexes :citations, type: :object
indexes :parts, type: :object
indexes :part_of, type: :object
indexes :versions, type: :object
indexes :version_of, type: :object
# indexes :parts, type: :object
# indexes :part_of, type: :object
# indexes :versions, type: :object
# indexes :version_of, type: :object
end
end

Expand Down Expand Up @@ -471,10 +475,10 @@ def as_indexed_json(options={})
"citation_count" => citation_count,
"citations_over_time" => citations_over_time,
"reference_count" => reference_count,
"part_count" => part_count,
"part_of_count" => part_of_count,
"version_count" => version_count,
"version_of_count" => version_of_count,
# "part_count" => part_count,
# "part_of_count" => part_of_count,
# "version_count" => version_count,
# "version_of_count" => version_of_count,
"prefix" => prefix,
"suffix" => suffix,
"types" => types,
Expand Down Expand Up @@ -510,21 +514,86 @@ def as_indexed_json(options={})
"provider" => provider.try(:as_indexed_json),
"resource_type" => resource_type.try(:as_indexed_json),
"media" => media.map { |m| m.try(:as_indexed_json) },
# "reference_event_ids" => reference_event_ids,
# "citation_event_ids" => citation_event_ids,
"reference_ids" => reference_ids,
# "references" => options[:exclude_associations] ? [] : references.map { |m| m.try(:as_indexed_json, exclude_associations: true) },
"references" => references.map { |m| m.try(:as_indexed_association_json) },
"citation_ids" => citation_ids,
# "citations" => options[:exclude_associations] ? [] : citations.map { |m| m.try(:as_indexed_json, exclude_associations: true) },
"part_ids" => part_ids,
"citations" => citations.map { |m| m.try(:as_indexed_association_json) },
#"part_ids" => part_ids,
# "parts" => options[:exclude_associations] ? [] : parts.map { |m| m.try(:as_indexed_json, exclude_associations: true) },
"part_of_ids" => part_of_ids,
#"part_of_ids" => part_of_ids,
# "part_of" => options[:exclude_associations] ? [] : part_of.map { |m| m.try(:as_indexed_json, exclude_associations: true) },
"version_ids" => version_ids,
#"version_ids" => version_ids,
# "versions" => options[:exclude_associations] ? [] : versions.map { |m| m.try(:as_indexed_json, exclude_associations: true) },
"version_of_ids" => version_of_ids,
#"version_of_ids" => version_of_ids,
# "version_of" => options[:exclude_associations] ? [] : version_of.map { |m| m.try(:as_indexed_json, exclude_associations: true) },
}
end

# don't index associations of associations to avoid endless loops
# also leave out big fields such as xml and related_identifiers
def as_indexed_association_json(options={})
{
"id" => uid,
"uid" => uid,
"doi" => doi,
"identifier" => identifier,
"url" => url,
"creators" => Array.wrap(creators),
"contributors" => Array.wrap(contributors),
"creator_names" => creator_names,
"titles" => Array.wrap(titles),
"descriptions" => Array.wrap(descriptions),
"publisher" => publisher,
"client_id" => client_id,
"provider_id" => provider_id,
"consortium_id" => consortium_id,
"resource_type_id" => resource_type_id,
"media_ids" => media_ids,
"view_count" => view_count,
"views_over_time" => views_over_time,
"download_count" => download_count,
"downloads_over_time" => downloads_over_time,
"citation_count" => citation_count,
"citations_over_time" => citations_over_time,
"reference_count" => reference_count,
# "part_count" => part_count,
# "part_of_count" => part_of_count,
# "version_count" => version_count,
# "version_of_count" => version_of_count,
"prefix" => prefix,
"suffix" => suffix,
"types" => types,
"identifiers" => identifiers,
"funding_references" => Array.wrap(funding_references),
"publication_year" => publication_year,
"dates" => dates,
"geo_locations" => Array.wrap(geo_locations),
"rights_list" => Array.wrap(rights_list),
"container" => container,
"content_url" => content_url,
"version_info" => version_info,
"formats" => Array.wrap(formats),
"sizes" => Array.wrap(sizes),
"language" => language,
"subjects" => Array.wrap(subjects),
"is_active" => is_active,
"landing_page" => landing_page,
"agency" => agency,
"aasm_state" => aasm_state,
"schema_version" => schema_version,
"metadata_version" => metadata_version,
"reason" => reason,
"source" => source,
"cache_key" => cache_key,
"registered" => registered,
"created" => created,
"updated" => updated,
"published" => published,
}
end

def self.query_aggregations
{
resource_types: { terms: { field: 'types.resourceTypeGeneral', size: 16, min_doc_count: 1 } },
Expand Down Expand Up @@ -1040,7 +1109,7 @@ def downloads_over_time
end

def reference_ids
references.pluck(:doi).map(&:downcase)
references.pluck(:doi).uniq.map(&:downcase)
end

def reference_count
Expand All @@ -1059,43 +1128,43 @@ def citation_count
# remove duplicate citing source dois,
# then show distribution by year
def citations_over_time
citation_events.pluck(:occurred_at, :source_doi).uniq { |v| v[1] }
citations.pluck(:occurred_at, :doi).uniq { |v| v[1] }
.group_by { |v| v[0].utc.iso8601[0..3] }
.map { |k, v| { "year" => k, "total" => v.length } }
.sort_by { |h| h["year"] }
end

def part_ids
parts.pluck(:doi).map(&:downcase)
end
# def part_ids
# parts.pluck(:doi).map(&:downcase)
# end

def part_count
parts.size
end
# def part_count
# parts.size
# end

def part_of_ids
part_of.pluck(:doi).map(&:downcase)
end
# def part_of_ids
# part_of.pluck(:doi).map(&:downcase)
# end

def part_of_count
part_of.size
end
# def part_of_count
# part_of.size
# end

def version_ids
versions.pluck(:doi).map(&:downcase)
end
# def version_ids
# versions.pluck(:doi).map(&:downcase)
# end

def version_count
versions.size
end
# def version_count
# versions.size
# end

def version_of_ids
version_of.pluck(:doi).map(&:downcase)
end
# def version_of_ids
# version_of.pluck(:doi).map(&:downcase)
# end

def version_of_count
version_of.size
end
# def version_of_count
# version_of.size
# end

def xml_encoded
Base64.strict_encode64(xml) if xml.present?
Expand Down
6 changes: 4 additions & 2 deletions app/serializers/doi_serializer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ class DoiSerializer

belongs_to :client, record_type: :clients
has_many :media, record_type: :media, id_method_name: :uid, if: Proc.new { |object, params| params && params[:detail] && !params[:is_collection]}
# has_many :references, record_type: :dois, serializer: DoiSerializer, if: Proc.new { |object, params| params && params[:detail] }
# has_many :citations, record_type: :dois, serializer: DoiSerializer, if: Proc.new { |object, params| params && params[:detail] }
# has_many :reference_events, record_type: :events, serializer: EventSerializer, if: Proc.new { |object, params| params && params[:detail] }
# has_many :citation_events, record_type: :events, serializer: EventSerializer, if: Proc.new { |object, params| params && params[:detail] }
has_many :references, record_type: :dois, serializer: DoiSerializer, if: Proc.new { |object, params| params && params[:detail] }
has_many :citations, record_type: :dois, serializer: DoiSerializer, if: Proc.new { |object, params| params && params[:detail] }
# has_many :parts, record_type: :dois, serializer: DoiSerializer, if: Proc.new { |object, params| params && params[:detail] }
# has_many :part_of, record_type: :dois, serializer: DoiSerializer, if: Proc.new { |object, params| params && params[:detail] }
# has_many :versions, record_type: :dois, serializer: DoiSerializer, if: Proc.new { |object, params| params && params[:detail] }
Expand Down
12 changes: 6 additions & 6 deletions spec/graphql/types/query_type_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

before do
Provider.import
sleep 1
sleep 2
end

let(:query) do
Expand Down Expand Up @@ -54,7 +54,7 @@
Doi.import
Prefix.import
ProviderPrefix.import
sleep 2
sleep 3
end

let(:query) do
Expand Down Expand Up @@ -170,7 +170,7 @@
Doi.import
Prefix.import
ClientPrefix.import
sleep 2
sleep 3
end

let(:query) do
Expand Down Expand Up @@ -433,7 +433,7 @@
Client.import
Event.import
Doi.import
sleep 2
sleep 3
end

let(:query) do
Expand Down Expand Up @@ -694,7 +694,7 @@

before do
Doi.import
sleep 1
sleep 2
end

let(:query) do
Expand Down Expand Up @@ -831,7 +831,7 @@

before do
Doi.import
sleep 1
sleep 2
end

let(:query) do
Expand Down
Loading

0 comments on commit 918f691

Please sign in to comment.