diff --git a/app/jobs/communication/website/destroy_website_job.rb b/app/jobs/communication/website/destroy_website_job.rb index 8e85367293..472e81a113 100644 --- a/app/jobs/communication/website/destroy_website_job.rb +++ b/app/jobs/communication/website/destroy_website_job.rb @@ -44,7 +44,7 @@ def perform(website) access_token: nil, repository: nil, ) - Search.remove_data_for_website(website) + University::SearchResult.remove_data_for_website(website) OBJECTS_NOT_PARANOID.each do |klass| klass.where(communication_website_id: website.id).destroy_all end diff --git a/app/jobs/search/build_index_job.rb b/app/jobs/search/build_index_job.rb index 10d0e7182b..c0cbe5f8f0 100644 --- a/app/jobs/search/build_index_job.rb +++ b/app/jobs/search/build_index_job.rb @@ -2,6 +2,6 @@ class Search::BuildIndexJob < ApplicationJob queue_as :whales def perform - Search.build_index + University::SearchResult.build_index end end \ No newline at end of file diff --git a/app/models/concerns/searchable.rb b/app/models/concerns/searchable.rb index b1ffd87bdb..881ef516bf 100644 --- a/app/models/concerns/searchable.rb +++ b/app/models/concerns/searchable.rb @@ -13,7 +13,7 @@ module Searchable def save_search_data localizations.each do |l10n| - search = Search.where( + search = University::SearchResult.where( university: university, about_object: self, about_localization: l10n, diff --git a/app/models/university.rb b/app/models/university.rb index 403105a80c..560faf7cc4 100644 --- a/app/models/university.rb +++ b/app/models/university.rb @@ -64,7 +64,7 @@ class University < ApplicationRecord has_many :active_storage_blobs, class_name: 'ActiveStorage::Blob' has_many :imports, dependent: :destroy has_many :apps, dependent: :destroy - has_many :search, dependent: :destroy + has_many :search_results, dependent: :destroy validates :name, presence: true validates :logo, size: { less_than: 1.megabytes } diff --git a/app/models/search.rb b/app/models/university/search_result.rb similarity index 83% rename from app/models/search.rb rename to app/models/university/search_result.rb index 21a778d2d4..f81d426c04 100644 --- a/app/models/search.rb +++ b/app/models/university/search_result.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: search_index +# Table name: university_search_results # # id :uuid not null, primary key # about_localization_type :string not null, indexed => [about_localization_id] @@ -18,12 +18,12 @@ # # Indexes # -# index_search_index_on_extranet_id (extranet_id) -# index_search_index_on_language_id (language_id) -# index_search_index_on_university_id (university_id) -# index_search_index_on_website_id (website_id) -# index_search_on_about_localization (about_localization_type,about_localization_id) -# index_search_on_about_object (about_object_type,about_object_id) +# index_search_on_about_localization (about_localization_type,about_localization_id) +# index_search_on_about_object (about_object_type,about_object_id) +# index_university_search_results_on_extranet_id (extranet_id) +# index_university_search_results_on_language_id (language_id) +# index_university_search_results_on_university_id (university_id) +# index_university_search_results_on_website_id (website_id) # # Foreign Keys # @@ -31,9 +31,8 @@ # fk_rails_62a3af3969 (extranet_id => communication_extranets.id) # fk_rails_bab17fceaa (university_id => universities.id) # -class Search < ApplicationRecord - self.table_name = 'search_index' - +class University::SearchResult < ApplicationRecord + SEARCHABLE_MODELS = [ Communication::Extranet, Communication::Extranet::Document, diff --git a/app/services/osuny/search.rb b/app/services/osuny/search.rb index 76d9ca28f0..2d55e15fc9 100644 --- a/app/services/osuny/search.rb +++ b/app/services/osuny/search.rb @@ -10,13 +10,13 @@ def initialize(term, university, language, website: nil, extranet: nil) end def results - term.present? ? build_search_results : Search.none + term.present? ? build_search_results : University::SearchResult.none end protected def build_search_results - results = university.search + results = university.search_results .for_title(term) .for_language(language) .limit(30) diff --git a/app/views/admin/search/index.html.erb b/app/views/admin/search/index.html.erb index 5a1d426412..4beeabb06f 100644 --- a/app/views/admin/search/index.html.erb +++ b/app/views/admin/search/index.html.erb @@ -1,38 +1,42 @@ -<% if @results.none? %> -

<%= t('admin.search.no_results') %>

-<% else %> -
- <% - @results.each do |result| - object = result.about_object - next unless object.present? && can?(:read, object) - # communication_website_post - path_class = object.class.polymorphic_name.parameterize.underscore - # admin_communication_website_post_path - begin - path_name = "admin_#{path_class}_path" - if result.website_id? - path = public_send path_name, { website_id: result.website_id, id: result.about_object_id } - elsif result.extranet_id? - path = public_send path_name, { extranet_id: result.extranet_id, id: result.about_object_id } - else - path = public_send path_name, { id: result.about_object_id } - end - rescue - next +<% +count = 0 +%> +
+ <% + @results.each do |result| + object = result.about_object + next unless object.present? && can?(:read, object) + # communication_website_post + path_class = object.class.polymorphic_name.parameterize.underscore + # admin_communication_website_post_path + begin + path_name = "admin_#{path_class}_path" + if result.website_id? + path = public_send path_name, { website_id: result.website_id, id: result.about_object_id } + elsif result.extranet_id? + path = public_send path_name, { extranet_id: result.extranet_id, id: result.about_object_id } + else + path = public_send path_name, { id: result.about_object_id } end - %> -
-
-
- <%= osuny_thumbnail_localized object %> -
- <%= osuny_link_localized object, path, classes: 'stretched-link' %>
- <%= object.class.model_name.human %> -
+ count += 1 + rescue + next + end + %> +
+
+
+ <%= osuny_thumbnail_localized object %> +
+ <%= osuny_link_localized object, path, classes: 'stretched-link' %>
+ <%= object.class.model_name.human %>
- <% end %> -
+
+ <% end %> +
+ +<% if count.zero? %> +

<%= t('admin.search.no_results') %>

<% end %> \ No newline at end of file diff --git a/db/migrate/20261020121410_rename_search_index_to_university_search_results.rb b/db/migrate/20261020121410_rename_search_index_to_university_search_results.rb new file mode 100644 index 0000000000..e8cecb56a9 --- /dev/null +++ b/db/migrate/20261020121410_rename_search_index_to_university_search_results.rb @@ -0,0 +1,5 @@ +class RenameSearchIndexToUniversitySearchResults < ActiveRecord::Migration[8.1] + def change + rename_table :search_index, :university_search_results + end +end diff --git a/db/schema.rb b/db/schema.rb index 3268c2e29b..bc58a26b10 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2026_10_19_120000) do +ActiveRecord::Schema[8.1].define(version: 2026_10_20_121410) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" enable_extension "pg_stat_statements" @@ -2356,27 +2356,6 @@ t.index ["university_id"], name: "index_research_thesis_localizations_on_university_id" end - create_table "search_index", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| - t.uuid "university_id", null: false - t.string "title" - t.text "text" - t.uuid "language_id", null: false - t.string "about_object_type", null: false - t.uuid "about_object_id", null: false - t.string "about_localization_type", null: false - t.uuid "about_localization_id", null: false - t.uuid "website_id" - t.uuid "extranet_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["about_localization_type", "about_localization_id"], name: "index_search_on_about_localization" - t.index ["about_object_type", "about_object_id"], name: "index_search_on_about_object" - t.index ["extranet_id"], name: "index_search_index_on_extranet_id" - t.index ["language_id"], name: "index_search_index_on_language_id" - t.index ["university_id"], name: "index_search_index_on_university_id" - t.index ["website_id"], name: "index_search_index_on_website_id" - end - create_table "server_emergency_messages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id" t.string "name" @@ -2775,6 +2754,27 @@ t.index ["university_id"], name: "index_university_roles_on_university_id" end + create_table "university_search_results", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id", null: false + t.string "title" + t.text "text" + t.uuid "language_id", null: false + t.string "about_object_type", null: false + t.uuid "about_object_id", null: false + t.string "about_localization_type", null: false + t.uuid "about_localization_id", null: false + t.uuid "website_id" + t.uuid "extranet_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["about_localization_type", "about_localization_id"], name: "index_search_on_about_localization" + t.index ["about_object_type", "about_object_id"], name: "index_search_on_about_object" + t.index ["extranet_id"], name: "index_university_search_results_on_extranet_id" + t.index ["language_id"], name: "index_university_search_results_on_language_id" + t.index ["university_id"], name: "index_university_search_results_on_university_id" + t.index ["website_id"], name: "index_university_search_results_on_website_id" + end + create_table "user_favorites", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "user_id", null: false t.string "about_type", null: false @@ -3171,9 +3171,6 @@ add_foreign_key "research_thesis_localizations", "languages" add_foreign_key "research_thesis_localizations", "research_theses", column: "about_id" add_foreign_key "research_thesis_localizations", "universities" - add_foreign_key "search_index", "communication_extranets", column: "extranet_id" - add_foreign_key "search_index", "communication_websites", column: "website_id" - add_foreign_key "search_index", "universities" add_foreign_key "server_emergency_messages", "universities" add_foreign_key "server_evolution_localizations", "languages" add_foreign_key "server_evolution_localizations", "server_evolutions", column: "evolution_id" @@ -3224,6 +3221,9 @@ add_foreign_key "university_role_localizations", "universities" add_foreign_key "university_role_localizations", "university_roles", column: "about_id" add_foreign_key "university_roles", "universities" + add_foreign_key "university_search_results", "communication_extranets", column: "extranet_id" + add_foreign_key "university_search_results", "communication_websites", column: "website_id" + add_foreign_key "university_search_results", "universities" add_foreign_key "user_favorites", "users" add_foreign_key "users", "languages" add_foreign_key "users", "universities"