From 3d94a86b8deb64248d84d61502816d98b6d28dbd Mon Sep 17 00:00:00 2001
From: Gyan Gupta <gyan@cottagelabs.com>
Date: Tue, 1 Apr 2025 18:05:21 +0530
Subject: [PATCH] add human-readable query

---
 .../complex_modalities_controller.rb          |  2 +-
 .../complex_sessions_controller.rb            |  2 +-
 .../complex_subjects_controller.rb            |  2 +-
 .../hyrax/crc1280_experiments_controller.rb   | 11 +--
 .../hyrax/dashboard/collections_controller.rb |  6 +-
 .../controllers/hyrax/datasets_controller.rb  |  2 +-
 .../bulkrax/valkyrie_object_factory.rb        | 18 ++--
 hyrax/app/helpers/admin_set_helper.rb         |  2 +-
 .../listeners/lifecycle_listener_helper.rb    | 12 +--
 hyrax/app/helpers/hyrax_helper.rb             | 11 +--
 .../jobs/hyrax/file_sets/grant_edit_job.rb    |  3 +-
 .../jobs/hyrax/file_sets/grant_read_job.rb    |  3 +-
 .../jobs/hyrax/file_sets/revoke_edit_job.rb   |  3 +-
 hyrax/app/jobs/valkyrie_ingest_job.rb         |  2 +-
 .../crc_folder_complex_subject_entry.rb       |  2 +-
 hyrax/app/models/complex_modality.rb          |  4 +-
 hyrax/app/models/complex_session.rb           |  4 +-
 hyrax/app/models/complex_subject.rb           |  6 +-
 hyrax/app/models/concerns/common_query.rb     | 93 +++++++++++++++++++
 .../concerns/hyrax/tombstone_behavior.rb      |  9 +-
 hyrax/app/models/concerns/rdms_roles.rb       |  8 +-
 .../app/models/concerns/s3_file_handleable.rb |  2 +-
 hyrax/app/models/crc1280_experiment.rb        | 19 +---
 hyrax/app/models/dataset.rb                   | 17 +---
 hyrax/app/models/hyrax/file_set.rb            | 17 +---
 hyrax/app/models/hyrax/pcdm_collection.rb     | 17 +---
 hyrax/app/models/user.rb                      |  8 +-
 .../hyrax/crc1280_experiment_presenter.rb     |  2 +-
 hyrax/app/services/doi_service.rb             |  2 +-
 .../collections/permissions_create_service.rb |  2 +-
 hyrax/app/services/hyrax/valkyrie_upload.rb   |  2 +-
 .../app/services/verify_crc_dataset_import.rb |  2 +-
 .../_all_children.html.erb                    |  2 +-
 .../_parent_collection.html.erb               |  2 +-
 .../hyrax/crc1280_experiments/_title.html.erb |  8 --
 .../hyrax/crc1280_experiments/show.html.erb   |  2 +-
 .../downloads_controller_override.rb          |  4 +-
 hyrax/config/initializers/riiif.rb            |  4 +-
 .../tasks/default_admin_set_for_workflow.rake |  2 +-
 39 files changed, 169 insertions(+), 150 deletions(-)
 create mode 100644 hyrax/app/models/concerns/common_query.rb

diff --git a/hyrax/app/controllers/hyrax/crc1280_experiments/complex_modalities_controller.rb b/hyrax/app/controllers/hyrax/crc1280_experiments/complex_modalities_controller.rb
index 9a6b84ad..0644b0e7 100644
--- a/hyrax/app/controllers/hyrax/crc1280_experiments/complex_modalities_controller.rb
+++ b/hyrax/app/controllers/hyrax/crc1280_experiments/complex_modalities_controller.rb
@@ -67,7 +67,7 @@ module Hyrax
       private
 
       def set_crc1280_experiment
-        @crc1280_experiment = ::Hyrax.query_service.find_by(id: params[:crc1280_experiment_id])
+        @crc1280_experiment = Crc1280Experiment.find(params[:crc1280_experiment_id])
       end
 
       def set_complex_session
diff --git a/hyrax/app/controllers/hyrax/crc1280_experiments/complex_sessions_controller.rb b/hyrax/app/controllers/hyrax/crc1280_experiments/complex_sessions_controller.rb
index 9bd3c041..1f641c6f 100644
--- a/hyrax/app/controllers/hyrax/crc1280_experiments/complex_sessions_controller.rb
+++ b/hyrax/app/controllers/hyrax/crc1280_experiments/complex_sessions_controller.rb
@@ -70,7 +70,7 @@ module Hyrax
       private
 
       def set_crc1280_experiment
-        @crc1280_experiment = ::Hyrax.query_service.find_by(id: params[:crc1280_experiment_id])
+        @crc1280_experiment = Crc1280Experiment.find(params[:crc1280_experiment_id])
       end
 
       def set_complex_subject
diff --git a/hyrax/app/controllers/hyrax/crc1280_experiments/complex_subjects_controller.rb b/hyrax/app/controllers/hyrax/crc1280_experiments/complex_subjects_controller.rb
index d99a7b38..35e17a9e 100644
--- a/hyrax/app/controllers/hyrax/crc1280_experiments/complex_subjects_controller.rb
+++ b/hyrax/app/controllers/hyrax/crc1280_experiments/complex_subjects_controller.rb
@@ -64,7 +64,7 @@ module Hyrax
       private
 
       def set_crc1280_experiment
-        @crc1280_experiment = ::Hyrax.query_service.find_by(id: params[:crc1280_experiment_id])
+        @crc1280_experiment = Crc1280Experiment.find(params[:crc1280_experiment_id])
       end
 
       def set_complex_subject
diff --git a/hyrax/app/controllers/hyrax/crc1280_experiments_controller.rb b/hyrax/app/controllers/hyrax/crc1280_experiments_controller.rb
index d4672000..c1007481 100644
--- a/hyrax/app/controllers/hyrax/crc1280_experiments_controller.rb
+++ b/hyrax/app/controllers/hyrax/crc1280_experiments_controller.rb
@@ -46,7 +46,7 @@ module Hyrax
     private
 
     def check_tombstone
-      @crc1280_experiment = Hyrax.query_service.find_by(id: params[:id])
+      @crc1280_experiment = Crc1280Experiment.find(params[:id])
       if current_user.present? && (current_user.publication_manager? || current_user.admin?)
         if @crc1280_experiment.is_tombstoned == true && params[:action] == 'edit'
           redirect_to main_app.polymorphic_path(@crc1280_experiment)
@@ -62,7 +62,7 @@ module Hyrax
     def redirect_to_default_collection
       return if params.has_key?(:add_works_to_collection)
 
-      collection = Hyrax::PcdmCollection.where(title: [ENV.fetch('CRC_1280_COLLECTION', "CRC 1280")]).first
+      collection = Hyrax::PcdmCollection.find_by(title: [ENV.fetch('CRC_1280_COLLECTION', "CRC 1280")])
 
       flash[:notice] = "You need to navigate to your group to create an experiment."
       redirect_to dashboard_collection_path(collection.id)
@@ -70,10 +70,9 @@ module Hyrax
  
     def build_breadcrumbs
       return super if ['show', 'edit'].exclude?(action_name)
-  
-      work = Hyrax.query_service.find_by(id: presenter.id)
-      parent_group_collection = Hyrax.query_service.custom_queries.find_parent_collections(resource: work).first
-      crc_1280_collection = Hyrax.query_service.custom_queries.find_parent_collections(resource: parent_group_collection).first if parent_group_collection
+      work = Crc1280Experiment.find(presenter.id)
+      parent_group_collection = work.parent_collections.first
+      crc_1280_collection =  parent_group_collection.parent_collections.first if parent_group_collection
 
       add_breadcrumb t(:'hyrax.controls.home'), root_path
       add_breadcrumb crc_1280_collection.title.first, dashboard_collection_path(crc_1280_collection.id) if crc_1280_collection.present?
diff --git a/hyrax/app/controllers/hyrax/dashboard/collections_controller.rb b/hyrax/app/controllers/hyrax/dashboard/collections_controller.rb
index e2df45ef..ea9f4eca 100644
--- a/hyrax/app/controllers/hyrax/dashboard/collections_controller.rb
+++ b/hyrax/app/controllers/hyrax/dashboard/collections_controller.rb
@@ -485,17 +485,17 @@ module Hyrax
       end
 
       def move_members_between_collections
+        
         remove_members_from_collection
         add_members_to_collection(collection_id: params[:destination_collection_id])
-
         destination_title =
-          Hyrax.query_service.find_by(id: params[:destination_collection_id]).title.first ||
+          Hyrax::PcdmCollection.find(params[:destination_collection_id]).title.first ||
           params[:destination_collection_id]
         flash[:notice] = "Successfully moved #{batch.count} files to #{destination_title} Collection."
       rescue StandardError => err
         Hyrax.logger.error(err)
         destination_title =
-          Hyrax.query_service.find_by(id: params[:destination_collection_id]).title.first ||
+        Hyrax::PcdmCollection.find(params[:destination_collection_id]).title.first ||
           destination_id
         flash[:error] = "An error occured. Files were not moved to #{destination_title} Collection."
       end
diff --git a/hyrax/app/controllers/hyrax/datasets_controller.rb b/hyrax/app/controllers/hyrax/datasets_controller.rb
index 0e549fb7..e68042f1 100644
--- a/hyrax/app/controllers/hyrax/datasets_controller.rb
+++ b/hyrax/app/controllers/hyrax/datasets_controller.rb
@@ -22,7 +22,7 @@ module Hyrax
     private
 
     def check_tombstone
-      @dataset =  Hyrax.query_service.find_by(id: params[:id])
+      @dataset =  Dataset.find(params[:id])
 
       if current_user.nil?
         if @dataset.is_tombstoned == true
diff --git a/hyrax/app/factories/bulkrax/valkyrie_object_factory.rb b/hyrax/app/factories/bulkrax/valkyrie_object_factory.rb
index 837330b0..3eec53a9 100644
--- a/hyrax/app/factories/bulkrax/valkyrie_object_factory.rb
+++ b/hyrax/app/factories/bulkrax/valkyrie_object_factory.rb
@@ -142,9 +142,9 @@ module Bulkrax
       if resource.respond_to?(:save!)
         resource.save!
       else
-        result = Hyrax.persister.save(resource: resource)
+        result = resource.save
         raise Valkyrie::Persistence::ObjectNotFoundError unless result
-        Hyrax.index_adapter.save(resource: result)
+        result.save_index
         if result.collection?
           publish('collection.metadata.updated', collection: result, user: user)
         else
@@ -156,7 +156,7 @@ module Bulkrax
 
     def self.update_index(resources:)
       Array(resources).each do |resource|
-        Hyrax.index_adapter.save(resource: resource)
+        resource.save_index
       end
     end
 
@@ -202,16 +202,14 @@ module Bulkrax
 
     def self.ordered_file_sets_for(object)
       return [] if object.blank?
-
-      Hyrax.custom_queries.find_child_file_sets(resource: object)
+      object.child_filesets
     end
 
     def delete(user)
       obj = find
       return false unless obj
-
-      Hyrax.persister.delete(resource: obj)
-      Hyrax.index_adapter.delete(resource: obj)
+      obj.delete
+      obj.delete_index
       self.class.publish(event: 'object.deleted', object: obj, user: user)
     end
 
@@ -230,7 +228,7 @@ module Bulkrax
       return if @object.depositor.present?
 
       @object.depositor = @user.email
-      object = Hyrax.persister.save(resource: @object)
+      object = @object.save
       self.class.publish(event: "object.metadata.updated", object: object, user: @user)
       object
     end
@@ -476,7 +474,7 @@ module Bulkrax
 
     # @Override Destroy existing files with Hyrax::Transactions
     def destroy_existing_files
-      existing_files = Hyrax.custom_queries.find_child_file_sets(resource: object)
+      existing_files = object.child_filesets
 
       existing_files.each do |fs|
         transactions["file_set.destroy"]
diff --git a/hyrax/app/helpers/admin_set_helper.rb b/hyrax/app/helpers/admin_set_helper.rb
index 1db3b1f2..d30b0bcf 100644
--- a/hyrax/app/helpers/admin_set_helper.rb
+++ b/hyrax/app/helpers/admin_set_helper.rb
@@ -1,5 +1,5 @@
 module AdminSetHelper
-  def self.find_admin_set_by_property(**args)
+  def self.find_by(**args)
     query = <<-SQL
       SELECT * FROM orm_resources
       WHERE metadata @> ?
diff --git a/hyrax/app/helpers/hyrax/listeners/lifecycle_listener_helper.rb b/hyrax/app/helpers/hyrax/listeners/lifecycle_listener_helper.rb
index 795bda0c..5a95a55b 100644
--- a/hyrax/app/helpers/hyrax/listeners/lifecycle_listener_helper.rb
+++ b/hyrax/app/helpers/hyrax/listeners/lifecycle_listener_helper.rb
@@ -14,8 +14,8 @@ module Hyrax
           object = object.register_ark(user: user)
         end
 
-        object = save_object!(object)
-        Hyrax.index_adapter.save(resource: object)
+        object.save
+        object.save_index
         object
       end
 
@@ -25,8 +25,8 @@ module Hyrax
           object = object.set_format_and_size
         end
 
-        object = save_object!(object)
-        Hyrax.index_adapter.save(resource: object)
+        object.save
+        object.save_index
         object
       end
 
@@ -74,10 +74,6 @@ module Hyrax
         s3.delete_object(bucket_name, self.object_key_on_s3)
         parent.update(date_modified: DateTime.now)
       end
-
-      def save_object!(object)
-        Hyrax.persister.save(resource: object)
-      end
     end
   end
 end
\ No newline at end of file
diff --git a/hyrax/app/helpers/hyrax_helper.rb b/hyrax/app/helpers/hyrax_helper.rb
index 850e896e..32cba110 100644
--- a/hyrax/app/helpers/hyrax_helper.rb
+++ b/hyrax/app/helpers/hyrax_helper.rb
@@ -45,19 +45,19 @@ module HyraxHelper
   end
 
   def manager_role(presenter)
-    Hyrax.query_service.find_by(id: presenter.id).manager_role
+    Hyrax::PcdmCollection.find(presenter.id).manager_role
   end
 
   def member_role(presenter)
-    Hyrax.query_service.find_by(id: presenter.id).member_role
+    Hyrax::PcdmCollection.find(presenter.id).member_role
   end
 
   def manager_role_for_group(presenter)
-    Hyrax.query_service.find_by(id: presenter.id).manager_role_for_group
+   Hyrax::PcdmCollection.find(presenter.id).manager_role_for_group
   end
 
   def member_role_for_group(presenter)
-    Hyrax.query_service.find_by(id: presenter.id).member_role_for_group
+    Hyrax::PcdmCollection.find(presenter.id).member_role_for_group
   end
 
   def can_create_work_in_group?(group_id)
@@ -151,8 +151,7 @@ module HyraxHelper
   def s3_file_download_url_for_file_set(file_set_id)
     s3 = S3StorageService.new
     s3.init_client
-
-    file_set = Hyrax.query_service.find_by(id: file_set_id)
+    file_set = Hyrax::FileSet.find(file_set_id)
     bucket_name = s3.sanitise_name(file_set.parent_work.id)
 
     s3.presigned_url_for_download(bucket_name, file_set.object_key_on_s3)
diff --git a/hyrax/app/jobs/hyrax/file_sets/grant_edit_job.rb b/hyrax/app/jobs/hyrax/file_sets/grant_edit_job.rb
index 093735ea..99802379 100644
--- a/hyrax/app/jobs/hyrax/file_sets/grant_edit_job.rb
+++ b/hyrax/app/jobs/hyrax/file_sets/grant_edit_job.rb
@@ -6,8 +6,7 @@ module Hyrax
       include PermissionJobBehavior
 
       def perform(file_set_id, group_key)
-        file_set = Hyrax.query_service.find_by(id: file_set_id)
-
+        file_set = Hyrax::FileSet.find(file_set_id)
         file_set.edit_groups = file_set.edit_groups.to_a + Array.wrap(group_key) # += works in Ruby 2.6+
         file_set.try(:permission_manager)&.acl&.save
       end
diff --git a/hyrax/app/jobs/hyrax/file_sets/grant_read_job.rb b/hyrax/app/jobs/hyrax/file_sets/grant_read_job.rb
index 23707d08..b34e52f6 100644
--- a/hyrax/app/jobs/hyrax/file_sets/grant_read_job.rb
+++ b/hyrax/app/jobs/hyrax/file_sets/grant_read_job.rb
@@ -8,8 +8,7 @@ module Hyrax
       include PermissionJobBehavior
 
       def perform(file_set_id, group_key)
-        file_set = Hyrax.query_service.find_by(id: file_set_id)
-
+        file_set = Hyrax::FileSet.find(file_set_id)
         file_set.read_groups = file_set.read_groups.to_a + Array.wrap(group_key) # += works in Ruby 2.6+
         file_set.try(:permission_manager)&.acl&.save
       end
diff --git a/hyrax/app/jobs/hyrax/file_sets/revoke_edit_job.rb b/hyrax/app/jobs/hyrax/file_sets/revoke_edit_job.rb
index db5349c1..133bda9e 100644
--- a/hyrax/app/jobs/hyrax/file_sets/revoke_edit_job.rb
+++ b/hyrax/app/jobs/hyrax/file_sets/revoke_edit_job.rb
@@ -8,8 +8,7 @@ module Hyrax
       include PermissionJobBehavior
 
       def perform(file_set_id, group_key)
-        file_set = Hyrax.query_service.find_by(id: file_set_id)
-
+        file_set = Hyrax::FileSet.find(file_set_id)
         file_set.edit_groups = file_set.edit_groups.to_a - Array.wrap(group_key) # += works in Ruby 2.6+
         file_set.try(:permission_manager)&.acl&.save
       end
diff --git a/hyrax/app/jobs/valkyrie_ingest_job.rb b/hyrax/app/jobs/valkyrie_ingest_job.rb
index e29c2bde..33e01664 100644
--- a/hyrax/app/jobs/valkyrie_ingest_job.rb
+++ b/hyrax/app/jobs/valkyrie_ingest_job.rb
@@ -24,7 +24,7 @@ class ValkyrieIngestJob < Hyrax::ApplicationJob
   # @return [void]
   def ingest(file:, pcdm_use:)
     file_set_uri = Valkyrie::ID.new(file.file_set_uri)
-    file_set = Hyrax.query_service.find_by(id: file_set_uri)
+    file_set = Hyrax::FileSet.find(file_set_uri)
     upload_file(
       file: file,
       file_set: file_set,
diff --git a/hyrax/app/models/bulkrax/crc_folder_complex_subject_entry.rb b/hyrax/app/models/bulkrax/crc_folder_complex_subject_entry.rb
index d96587ab..91ba8b9d 100644
--- a/hyrax/app/models/bulkrax/crc_folder_complex_subject_entry.rb
+++ b/hyrax/app/models/bulkrax/crc_folder_complex_subject_entry.rb
@@ -29,7 +29,7 @@ module Bulkrax
     end
 
     def crc1280_experiment_created?
-      ::Crc1280Experiment.find_by_property(source: [self.raw_metadata['parents']]).present?
+      ::Crc1280Experiment.find_by(source: [self.raw_metadata['parents']]).present?
     end
 
     def validate_and_fix_title
diff --git a/hyrax/app/models/complex_modality.rb b/hyrax/app/models/complex_modality.rb
index c2f08822..637da4be 100644
--- a/hyrax/app/models/complex_modality.rb
+++ b/hyrax/app/models/complex_modality.rb
@@ -31,7 +31,7 @@ class ComplexModality < ActiveRecord::Base
   }
 
   def file_sets
-    @file_sets ||= FileSet.where(for_complex_type: ["ComplexModality"], for_complex_identifier: [self.source_identifier])
+    @file_sets ||= Hyrax::FileSet.where(for_complex_type: ["ComplexModality"], for_complex_identifier: [self.source_identifier])
   end
 
   def s3_object_prefix
@@ -69,6 +69,6 @@ class ComplexModality < ActiveRecord::Base
   end
 
   def reindex_parent_work
-    Hyrax.index_adapter.save(resource: crc1280_experiment)
+    crc1280_experiment.save_index
   end
 end
diff --git a/hyrax/app/models/complex_session.rb b/hyrax/app/models/complex_session.rb
index 38ecb059..2bd9dfcb 100644
--- a/hyrax/app/models/complex_session.rb
+++ b/hyrax/app/models/complex_session.rb
@@ -32,7 +32,7 @@ class ComplexSession < ActiveRecord::Base
   }
 
   def file_sets
-    @file_sets ||= FileSet.where(for_complex_type: ["ComplexSession"], for_complex_identifier: [self.source_identifier])
+    @file_sets ||= Hyrax::FileSet.where(for_complex_type: ["ComplexSession"], for_complex_identifier: [self.source_identifier])
   end
 
   def display_date_recorded
@@ -74,6 +74,6 @@ class ComplexSession < ActiveRecord::Base
   end
 
   def reindex_parent_work
-    Hyrax.index_adapter.save(resource: crc1280_experiment)
+    crc1280_experiment.save_index
   end
 end
diff --git a/hyrax/app/models/complex_subject.rb b/hyrax/app/models/complex_subject.rb
index cccbae8f..fdb2ca2e 100644
--- a/hyrax/app/models/complex_subject.rb
+++ b/hyrax/app/models/complex_subject.rb
@@ -30,11 +30,11 @@ class ComplexSubject < ActiveRecord::Base
   } #Thu, 05 Dec 2024 05:36:17 +0000
 
   def crc1280_experiment
-    @crc1280_experiment ||= Crc1280Experiment.find_by_property(source: [parent_source_identifier])
+    @crc1280_experiment ||= Crc1280Experiment.find_by(source: [parent_source_identifier])
   end
 
   def file_sets
-    @file_sets ||= FileSet.where(for_complex_type: ["ComplexSubject"], for_complex_identifier: [self.source_identifier])
+    @file_sets ||= Hyrax::FileSet.where(for_complex_type: ["ComplexSubject"], for_complex_identifier: [self.source_identifier])
   end
 
   def s3_object_prefix
@@ -72,6 +72,6 @@ class ComplexSubject < ActiveRecord::Base
   end
 
   def reindex_parent_work
-    Hyrax.index_adapter.save(resource: crc1280_experiment)
+    crc1280_experiment.save_index
   end
 end
diff --git a/hyrax/app/models/concerns/common_query.rb b/hyrax/app/models/concerns/common_query.rb
new file mode 100644
index 00000000..a590fb5f
--- /dev/null
+++ b/hyrax/app/models/concerns/common_query.rb
@@ -0,0 +1,93 @@
+module CommonQuery
+  extend ActiveSupport::Concern
+
+  def parent_collections
+    return [] unless self.persisted?
+    Hyrax.query_service.custom_queries.find_parent_collections(resource: self)
+  end
+
+  def parent_work
+    Hyrax.custom_queries.find_parent_work(resource: self)
+  end 
+
+  def child_filesets
+    Hyrax.custom_queries.find_child_file_sets(resource: self)
+  end 
+
+
+  # save resource
+  def save
+    Hyrax.persister.save(resource: self)
+  end
+
+  def save_index
+    Hyrax.index_adapter.save(resource: self)
+  end 
+  
+
+  # delete resource
+  def delete
+    Hyrax.persister.delete(resource: self)
+  end 
+
+  def delete_index
+    Hyrax.index_adapter.delete(resource: self)
+  end 
+
+
+  # clss methods 
+  class_methods do
+    def find_by(**args)
+      conditions = ["metadata @> ?"]
+      id = args.delete(:id)
+      jsonb_query = args.to_json
+
+      if id.present?
+        if valid_uuid?(id)
+          conditions << "id = '#{id}'"
+        else
+          raise Valkyrie::Persistence::ObjectNotFoundError, "Invalid or missing UUID for id=#{id}"
+        end
+      end
+
+      conditions << "internal_resource = '#{name}'"
+
+      query = <<-SQL
+        SELECT * FROM orm_resources
+        WHERE #{conditions.join(' AND ')};
+      SQL
+
+      Hyrax.query_service.run_query(query, jsonb_query).first
+    end
+
+    def where(**args)
+      query = <<-SQL
+        SELECT * FROM orm_resources
+        WHERE metadata @> ?
+        AND internal_resource = '#{name}';
+      SQL
+
+      jsonb_query = args.to_json
+      Hyrax.query_service.run_query(query, jsonb_query).to_a
+    end
+
+    def find(id)
+      unless id.present? && valid_uuid?(id)
+        raise Valkyrie::Persistence::ObjectNotFoundError, "Invalid or missing UUID for id=#{id}"
+      end
+    
+      result = find_by(id: id)
+    
+      if result.nil?
+        raise Valkyrie::Persistence::ObjectNotFoundError, "Couldn't find resource with id=#{id}"
+      end
+    
+      result
+    end
+
+    def valid_uuid?(string)
+      uuid_regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
+      uuid_regex.match?(string)
+    end
+  end
+end
diff --git a/hyrax/app/models/concerns/hyrax/tombstone_behavior.rb b/hyrax/app/models/concerns/hyrax/tombstone_behavior.rb
index 9d983f9f..12f415f7 100644
--- a/hyrax/app/models/concerns/hyrax/tombstone_behavior.rb
+++ b/hyrax/app/models/concerns/hyrax/tombstone_behavior.rb
@@ -5,8 +5,7 @@ module Hyrax
       self.is_tombstoned = true 
       self.tombstone_status = "initiated"
       self.tombstone_date = DateTime.now
-    
-      work = Hyrax.persister.save(resource: self)
+      work = self.save
       Hyrax.publisher.publish('object.metadata.updated', object: work, user: user)
     end
   
@@ -14,8 +13,7 @@ module Hyrax
       return false unless self.is_tombstoned || self.tombstone_status == "initiated"
   
       self.tombstone_status = "deleted"
-      
-      work = Hyrax.persister.save(resource: self)
+      work = self.save
       Hyrax.publisher.publish('object.metadata.updated', object: work, user: user)
 
       Hyrax::RemoveAssociatedObjectsJob.perform_later(work.id.to_s, user.id)
@@ -27,8 +25,7 @@ module Hyrax
   
       self.is_tombstoned = false
       self.tombstone_status = "restored"
-
-      work = Hyrax.persister.save(resource: self)
+      work = self.save
       Hyrax.publisher.publish('object.metadata.updated', object: work, user: user)
     end
   end
diff --git a/hyrax/app/models/concerns/rdms_roles.rb b/hyrax/app/models/concerns/rdms_roles.rb
index 35c4cbf6..4f53bef1 100644
--- a/hyrax/app/models/concerns/rdms_roles.rb
+++ b/hyrax/app/models/concerns/rdms_roles.rb
@@ -26,7 +26,7 @@ module RdmsRoles
   end
 
   def crc_manager_for?(group_id)
-    group =  Hyrax.query_service.find_by(id: group_id) rescue nil
+    group =  Hyrax::PcdmCollection.find(group_id) rescue nil
     
     return false unless group
     
@@ -35,7 +35,7 @@ module RdmsRoles
   end
 
   def group_manager_for?(group_id)
-    group =  Hyrax.query_service.find_by(id: group_id) rescue nil
+    group =  Hyrax::PcdmCollection.find(group_id) rescue nil
     
     return false unless group
     
@@ -44,7 +44,7 @@ module RdmsRoles
   end
 
   def crc_member_for?(group_id)
-    group =  Hyrax.query_service.find_by(id: group_id) rescue nil
+    group =  Hyrax::PcdmCollection.find(group_id) rescue nil
     
     return false unless group
     
@@ -53,7 +53,7 @@ module RdmsRoles
   end
 
   def group_member_for?(group_id)
-    group =  Hyrax.query_service.find_by(id: group_id) rescue nil
+    group =  Hyrax::PcdmCollection.find(group_id) rescue nil
     
     return false unless group
     
diff --git a/hyrax/app/models/concerns/s3_file_handleable.rb b/hyrax/app/models/concerns/s3_file_handleable.rb
index 73c40f99..6cccc4dc 100644
--- a/hyrax/app/models/concerns/s3_file_handleable.rb
+++ b/hyrax/app/models/concerns/s3_file_handleable.rb
@@ -75,7 +75,7 @@ module S3FileHandleable
     crc1280_experiment.files_size = [total_size.to_s]
     crc1280_experiment.format = list_of_format
 
-    Hyrax.persister.save(resource: crc1280_experiment)
+    crc1280_experiment.save
   end
 
 
diff --git a/hyrax/app/models/crc1280_experiment.rb b/hyrax/app/models/crc1280_experiment.rb
index d71d299f..efe74a41 100644
--- a/hyrax/app/models/crc1280_experiment.rb
+++ b/hyrax/app/models/crc1280_experiment.rb
@@ -10,7 +10,7 @@ class Crc1280Experiment < Hyrax::Work
   attribute :complex_identifier , Valkyrie::Types::Array.of(Valkyrie::Types::String)
   include Hyrax::Schema(:basic_metadata)
   include Hyrax::Schema(:crc1280_experiment)
-  include CommonWorksQuery
+  include CommonQuery
   include ::Hyrax::TombstoneBehavior
   include ExternalServices
   include S3FileHandleable
@@ -32,22 +32,11 @@ class Crc1280Experiment < Hyrax::Work
   ] + CRC_FILTER_FACET_FIELDS
 
   def default_admin_set
-    AdminSetHelper.find_admin_set_by_property(title: [ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')])
-  end
-
-  def self.find_by_property(**args)
-    query = <<-SQL
-      SELECT * FROM orm_resources
-      WHERE metadata @> ?
-      AND internal_resource = 'Crc1280Experiment';
-    SQL
-
-    jsonb_query = args.to_json
-    Hyrax.query_service.run_query(query, jsonb_query).first
+    AdminSetHelper.find_by(title: [ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')])
   end
 
   def file_sets
-    @file_sets ||= FileSet.where(for_complex_type: ["Crc1280Experiment"], for_complex_identifier: self.source)
+    @file_sets ||= Hyrax::FileSet.where(for_complex_type: ["Crc1280Experiment"], for_complex_identifier: self.source)
   end
 
   def complex_subjects
@@ -63,7 +52,7 @@ class Crc1280Experiment < Hyrax::Work
   end
 
   def apply_parent_permissions
-    parent =  Hyrax.custom_queries.find_parent_collections(resource: self).first
+    parent = self.parent_collections.first
     if parent.present?
       template = Hyrax::PermissionTemplate.find_by(source_id: parent.id.to_s)
       self.edit_groups += template.agent_ids_for(agent_type: 'group', access: 'manage')
diff --git a/hyrax/app/models/dataset.rb b/hyrax/app/models/dataset.rb
index b12f4b88..48f2af82 100644
--- a/hyrax/app/models/dataset.rb
+++ b/hyrax/app/models/dataset.rb
@@ -10,28 +10,17 @@ class Dataset < Hyrax::Work
   attribute :complex_identifier , Valkyrie::Types::Array.of(Valkyrie::Types::String)
   include Hyrax::Schema(:basic_metadata)
   include Hyrax::Schema(:dataset)
-  include CommonWorksQuery
+  include CommonQuery
   include ::Hyrax::TombstoneBehavior
   include ExternalServices
   include S3FileHandleable
 
   def default_admin_set
-    AdminSetHelper.find_admin_set_by_property(title: [ENV.fetch('RUB_ADMIN_SET_TITLE', 'RUB publication workflow')])
-  end
-
-  def self.find_by_property(**args)
-    query = <<-SQL
-      SELECT * FROM orm_resources
-      WHERE metadata @> ?
-      AND internal_resource = 'Dataset';
-    SQL
-
-    jsonb_query = args.to_json
-    Hyrax.query_service.run_query(query, jsonb_query).first
+    AdminSetHelper.find_by(title: [ENV.fetch('RUB_ADMIN_SET_TITLE', 'RUB publication workflow')])
   end
 
   def file_sets
-    @file_sets ||= Hyrax.custom_queries.find_child_file_sets(resource: self)
+    @file_sets ||= self.child_filesets
   end
 end
 
diff --git a/hyrax/app/models/hyrax/file_set.rb b/hyrax/app/models/hyrax/file_set.rb
index f5b38e39..5cdad76c 100644
--- a/hyrax/app/models/hyrax/file_set.rb
+++ b/hyrax/app/models/hyrax/file_set.rb
@@ -51,6 +51,7 @@ module Hyrax
   class FileSet < Hyrax::Resource
     include Hyrax::Schema(:core_metadata)
     include Hyrax::Schema(:file_set_metadata)
+    include CommonQuery
 
     attribute :for_complex_identifier, Valkyrie::Types::String
     attribute :for_complex_type, Valkyrie::Types::String
@@ -128,22 +129,6 @@ module Hyrax
       true
     end
 
-    def self.where(**args)
-      query = <<-SQL
-        SELECT * FROM orm_resources
-        WHERE metadata @> ?
-        AND internal_resource = 'Hyrax::FileSet';
-      SQL
-
-      jsonb_query = args.to_json
-
-      Hyrax.query_service.run_query(query, jsonb_query).to_a
-    end
-
-    def parent_work
-      Hyrax.custom_queries.find_parent_work(resource: self)
-    end
-
     def parent_object
       case for_complex_type
       when 'ComplexSubject'
diff --git a/hyrax/app/models/hyrax/pcdm_collection.rb b/hyrax/app/models/hyrax/pcdm_collection.rb
index 41fe97e6..c5c213ec 100644
--- a/hyrax/app/models/hyrax/pcdm_collection.rb
+++ b/hyrax/app/models/hyrax/pcdm_collection.rb
@@ -42,6 +42,7 @@ module Hyrax
   class PcdmCollection < Hyrax::Resource
     include Hyrax::Schema(:core_metadata)
     include Hyrax::Schema(:collection_metadata)
+    include CommonQuery
 
     attribute :collection_type_gid, Valkyrie::Types::String
     attribute :member_ids, Valkyrie::Types::Array.of(Valkyrie::Types::ID).meta(ordered: true)
@@ -94,22 +95,6 @@ module Hyrax
       Role.find_by_name("#{collection_type.title.parameterize(separator: '_')}_#{id}_member")
     end
 
-    def parent_collections
-      Hyrax.custom_queries.find_parent_collections(resource: self)
-     
-    end
-
-    def self.where(**args)
-      query = <<-SQL
-        SELECT * FROM orm_resources
-        WHERE metadata @> ?
-        AND internal_resource = 'Hyrax::PcdmCollection';
-      SQL
-  
-      jsonb_query = args.to_json
-      Hyrax.query_service.run_query(query, jsonb_query)
-    end
-
     protected
 
     def visibility_writer
diff --git a/hyrax/app/models/user.rb b/hyrax/app/models/user.rb
index 06557226..1b1b76e8 100644
--- a/hyrax/app/models/user.rb
+++ b/hyrax/app/models/user.rb
@@ -238,7 +238,7 @@ class User < ApplicationRecord
   private
   
   def handle_crc_1280_manager_role(action)
-    admin_set = AdminSetHelper.find_admin_set_by_property(title: [ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')])
+    admin_set = AdminSetHelper.find_by(title: [ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')])
     add_or_remove_responsibility(admin_set, 'approving_crc_manager', action)
   end
   
@@ -249,19 +249,19 @@ class User < ApplicationRecord
     ]
 
     titles.each do |title|
-      admin_set = AdminSetHelper.find_admin_set_by_property(title: [title])
+      admin_set = AdminSetHelper.find_by(title: [title])
       next if admin_set.nil?
       add_or_remove_responsibility(admin_set, 'approving_publication_manager', action)
     end
   end
   
   def handle_group_manager_role(action)
-    admin_set = AdminSetHelper.find_admin_set_by_property(title: [ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')])
+    admin_set = AdminSetHelper.find_by(title: [ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')])
     add_or_remove_responsibility(admin_set, 'approving_group_manager', action)
   end
 
   def handle_group_member_role(action)
-    admin_set = AdminSetHelper.find_admin_set_by_property(title: [ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')])
+    admin_set = AdminSetHelper.find_by(title: [ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')])
     add_or_remove_responsibility(admin_set, 'depositor', action)
   end
 
diff --git a/hyrax/app/presenters/hyrax/crc1280_experiment_presenter.rb b/hyrax/app/presenters/hyrax/crc1280_experiment_presenter.rb
index 79a3f411..648aa612 100644
--- a/hyrax/app/presenters/hyrax/crc1280_experiment_presenter.rb
+++ b/hyrax/app/presenters/hyrax/crc1280_experiment_presenter.rb
@@ -15,7 +15,7 @@ module Hyrax
         'session' => {},
         'modality' => {}
       }
-      experiment =  Hyrax.query_service.find_by(id: self.id)
+      experiment =  Crc1280Experiment.find(self.id)
 
       # subject filter query if filter available
       subject_query = build_query(subject_field_mappings, options[:filter])
diff --git a/hyrax/app/services/doi_service.rb b/hyrax/app/services/doi_service.rb
index 6c5531db..bc6fa2e0 100644
--- a/hyrax/app/services/doi_service.rb
+++ b/hyrax/app/services/doi_service.rb
@@ -66,7 +66,7 @@ class DoiService
 
     @work.complex_identifier = @work.complex_identifier + [complex_identifier]
     @work.complex_date = @work.complex_date + [complex_date]
-    Hyrax.persister.save(resource: @work)
+    @work.save
     Hyrax.publisher.publish('object.metadata.updated', object: @work, user: user)
   end
 end
\ No newline at end of file
diff --git a/hyrax/app/services/hyrax/collections/permissions_create_service.rb b/hyrax/app/services/hyrax/collections/permissions_create_service.rb
index e341d838..0d09910a 100644
--- a/hyrax/app/services/hyrax/collections/permissions_create_service.rb
+++ b/hyrax/app/services/hyrax/collections/permissions_create_service.rb
@@ -44,7 +44,7 @@ module Hyrax
         #       access: Hyrax::PermissionTemplateAccess::DEPOSIT } ]
         # @see Hyrax::PermissionTemplateAccess for valid values for agent_type and access
         def add_access(collection_id:, grants:)
-          collection = Hyrax.query_service.find_by(id: collection_id)
+          collection = Hyrax::PcdmCollection.find(collection_id)
           template = Hyrax::PermissionTemplate.find_by!(source_id: collection_id.to_s)
           grants.each do |grant|
             Hyrax::PermissionTemplateAccess.find_or_create_by(permission_template_id: template.id.to_s,
diff --git a/hyrax/app/services/hyrax/valkyrie_upload.rb b/hyrax/app/services/hyrax/valkyrie_upload.rb
index ef52eafa..ff9749c2 100644
--- a/hyrax/app/services/hyrax/valkyrie_upload.rb
+++ b/hyrax/app/services/hyrax/valkyrie_upload.rb
@@ -143,7 +143,7 @@ class Hyrax::ValkyrieUpload
   # @return [Hyrax::FileSet] updated file set
   def add_file_to_file_set(file_set:, file_metadata:, user:)
     file_set.file_ids += [file_metadata.id]
-    Hyrax.persister.save(resource: file_set)
+    file_set.save
     Hyrax.publisher.publish('object.membership.updated', object: file_set, user: user)
   end
 
diff --git a/hyrax/app/services/verify_crc_dataset_import.rb b/hyrax/app/services/verify_crc_dataset_import.rb
index 462bb017..0719695b 100644
--- a/hyrax/app/services/verify_crc_dataset_import.rb
+++ b/hyrax/app/services/verify_crc_dataset_import.rb
@@ -119,7 +119,7 @@ class VerifyCrcDatasetImport
     end
 
     # Get CrcDataset for the entry
-    works = Crc1280Experiment.find_by_property(source: [entry.identifier])
+    works = Crc1280Experiment.find_by(source: [entry.identifier])
     unless works.present?
       msg = "The CrcDataset with source identifier #{entry.identifier} was not found"
       return false, msg, paths_compared, nil
diff --git a/hyrax/app/views/hyrax/crc1280_experiments/_all_children.html.erb b/hyrax/app/views/hyrax/crc1280_experiments/_all_children.html.erb
index fa3c6712..0c9cdddd 100644
--- a/hyrax/app/views/hyrax/crc1280_experiments/_all_children.html.erb
+++ b/hyrax/app/views/hyrax/crc1280_experiments/_all_children.html.erb
@@ -1,5 +1,5 @@
 <%
-  member_ids = Hyrax.query_service.custom_queries.find_child_file_sets(resource: work).to_a #+ experiment.complex_subjects&.ids
+  member_ids =  work.child_filesets.to_a #+ experiment.complex_subjects&.ids
 %>
 
 <% if presenter.crc_work_type.present? && presenter.crc_work_type[0] == 'experiment' %>
diff --git a/hyrax/app/views/hyrax/crc1280_experiments/_parent_collection.html.erb b/hyrax/app/views/hyrax/crc1280_experiments/_parent_collection.html.erb
index e20a5e9c..2053a322 100644
--- a/hyrax/app/views/hyrax/crc1280_experiments/_parent_collection.html.erb
+++ b/hyrax/app/views/hyrax/crc1280_experiments/_parent_collection.html.erb
@@ -1,4 +1,4 @@
-<% parent_collections = Hyrax.query_service.custom_queries.find_parent_collections(resource: collection) %>
+<% parent_collections = collection.parent_collections %>
 <% if parent_collections.present? %>
   <% parent_collections.each do |collection| %>
     <%= render 'parent_collection', collection: collection %>
diff --git a/hyrax/app/views/hyrax/crc1280_experiments/_title.html.erb b/hyrax/app/views/hyrax/crc1280_experiments/_title.html.erb
index 09c40f39..122f7572 100644
--- a/hyrax/app/views/hyrax/crc1280_experiments/_title.html.erb
+++ b/hyrax/app/views/hyrax/crc1280_experiments/_title.html.erb
@@ -14,14 +14,6 @@
           </h2>
         <% end %>
       <% end %>
-      <div class="row">
-        <% if is_published?(presenter) %>
-          <div class="col-md-3">
-            <%= render 'citations', presenter: @presenter %>
-            <%= render 'social_media' %>
-          </div>
-        <% end %>
-      </div>
     </div>
   </div>
 </div>
\ No newline at end of file
diff --git a/hyrax/app/views/hyrax/crc1280_experiments/show.html.erb b/hyrax/app/views/hyrax/crc1280_experiments/show.html.erb
index 202e8e76..108f4354 100644
--- a/hyrax/app/views/hyrax/crc1280_experiments/show.html.erb
+++ b/hyrax/app/views/hyrax/crc1280_experiments/show.html.erb
@@ -1,5 +1,5 @@
 <% presenter ||= @presenter %>
-<% work = Hyrax.query_service.find_by(id: presenter.id) %>
+<% work = Crc1280Experiment.find(presenter.id) %>
 <% filter = params[:filter].present? ? params[:filter].permit!.to_h : {} %>
 <div class="row show-work">
   <div class="col-md-12 work-type">
diff --git a/hyrax/config/initializers/downloads_controller_override.rb b/hyrax/config/initializers/downloads_controller_override.rb
index 7fd9bd02..f5efb423 100644
--- a/hyrax/config/initializers/downloads_controller_override.rb
+++ b/hyrax/config/initializers/downloads_controller_override.rb
@@ -10,12 +10,12 @@ Rails.application.config.to_prepare do
             use_valkyrie: Hyrax.config.use_valkyrie?
           )
         else
-          Hyrax.query_service.find_by(id: file_set_id)
+          Hyrax::FileSet.find(file_set_id)
         end
       @parent ||=
         case file_set
         when Hyrax::Resource
-          Hyrax.query_service.find_parents(resource: file_set).first
+          file_set.parent_work
         else
           file_set.parent
         end
diff --git a/hyrax/config/initializers/riiif.rb b/hyrax/config/initializers/riiif.rb
index eace5cda..25edd426 100644
--- a/hyrax/config/initializers/riiif.rb
+++ b/hyrax/config/initializers/riiif.rb
@@ -97,8 +97,8 @@ module Hyrax
     def load_file(id)
       benchmark "RiiifFileResolver loaded #{id}", level: :debug do
         fs_id = id.sub(/\A([^\/]*)\/.*/, '\1')
-        file_set = Hyrax.query_service.find_by(id: fs_id)
-        file_metadata = Hyrax.custom_queries.find_original_file(file_set: file_set)
+        file_set = Hyrax::FileSet.find(fs_id)
+        file_metadata = file_set.original_file
         file_metadata.file.disk_path.to_s # Stores a local copy in tmpdir
       end
     end
diff --git a/hyrax/lib/tasks/default_admin_set_for_workflow.rake b/hyrax/lib/tasks/default_admin_set_for_workflow.rake
index c0a5b776..5955eabf 100644
--- a/hyrax/lib/tasks/default_admin_set_for_workflow.rake
+++ b/hyrax/lib/tasks/default_admin_set_for_workflow.rake
@@ -12,7 +12,7 @@ namespace :hyrax do
         crc_default_admin_set_title = ENV.fetch('CRC_ADMIN_SET_TITLE', 'CRC 1280 Publishing Workflow')
 
         [rub_default_admin_set_title, crc_default_admin_set_title].each do |title|
-          unless AdminSetHelper.find_admin_set_by_property(title: [title]).present?
+          unless AdminSetHelper.find_by(title: [title]).present?
             admin_set = Hyrax::AdministrativeSet.new(title: [title])
             updated_admin_set = Hyrax.persister.save(resource: admin_set)
             
-- 
GitLab