From d28e333e763eb6927cd04e7dd483a98442ecaca2 Mon Sep 17 00:00:00 2001 From: WebDevTrev <96503752+web-dev-trev@users.noreply.github.com> Date: Fri, 22 Nov 2024 14:57:55 -0600 Subject: [PATCH 1/5] Update references of catalogs to publications [WEB-2971] --- app/Http/Controllers/SearchController.php | 6 +++--- app/Models/Api/Search.php | 4 ++-- app/Models/PrintedPublication.php | 2 +- app/Repositories/Api/SearchRepository.php | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 4c8d530849..6602be9223 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -139,7 +139,7 @@ public function index() public function autocomplete() { $collection = GeneralSearch::search(request('q')) - ->resources(['artworks', 'exhibitions', 'artists', 'agents', 'events', 'articles', 'digital-catalogs', 'printed-catalogs', 'highlights']) + ->resources(['artworks', 'exhibitions', 'artists', 'agents', 'events', 'articles', 'digital-publications', 'printed-publications', 'highlights']) ->getSearch(self::AUTOCOMPLETE_PER_PAGE); foreach ($collection as &$item) { @@ -439,8 +439,8 @@ protected function buildSearchLinks($all, $active = 'all') } array_push($links, $this->buildLabel('Interactive Features', $all->total(), route('search.interactive-features', ['q' => request('q')]), $active == 'interactive-features')); - if (QueryHelpers::extractAggregation($aggregations, ['digital-catalogs', 'printed-catalogs'])) { - array_push($links, $this->buildLabel('Publications', QueryHelpers::extractAggregation($aggregations, ['digital-catalogs', 'printed-catalogs']), route('search.publications', ['q' => request('q')]), $active == 'publications')); + if (QueryHelpers::extractAggregation($aggregations, ['digital-publications', 'printed-catalogs'])) { + array_push($links, $this->buildLabel('Publications', QueryHelpers::extractAggregation($aggregations, ['digital-publications', 'printed-publications']), route('search.publications', ['q' => request('q')]), $active == 'publications')); } if (QueryHelpers::extractAggregation($aggregations, 'educator-resources')) { diff --git a/app/Models/Api/Search.php b/app/Models/Api/Search.php index 5ae0a6ccf5..4b9563efd6 100644 --- a/app/Models/Api/Search.php +++ b/app/Models/Api/Search.php @@ -27,8 +27,8 @@ class Search extends BaseApiModel 'sections' => 'App\Models\Api\Section', 'events' => 'App\Models\Event', 'articles' => 'App\Models\Article', - 'printed-catalogs' => 'App\Models\PrintedPublication', - 'digital-catalogs' => 'App\Models\DigitalPublication', + 'printed-publications' => 'App\Models\PrintedPublication', + 'digital-publications' => 'App\Models\DigitalPublication', 'digital-publication-articles' => 'App\Models\DigitalPublicationArticle', 'static-pages' => 'App\Models\Page', 'generic-pages' => 'App\Models\GenericPage', diff --git a/app/Models/PrintedPublication.php b/app/Models/PrintedPublication.php index 6e889075c2..06b44e50c6 100644 --- a/app/Models/PrintedPublication.php +++ b/app/Models/PrintedPublication.php @@ -84,7 +84,7 @@ class PrintedPublication extends AbstractModel public function categories() { - return $this->belongsToMany('App\Models\CatalogCategory', 'catalog_category_printed_catalog', 'printed_catalog_id'); + return $this->belongsToMany('App\Models\CatalogCategory', 'catalog_category_printed_publication', 'printed_publication_id'); } public function scopeIds($query, $ids = []) diff --git a/app/Repositories/Api/SearchRepository.php b/app/Repositories/Api/SearchRepository.php index 13d4e80dea..675f93a110 100644 --- a/app/Repositories/Api/SearchRepository.php +++ b/app/Repositories/Api/SearchRepository.php @@ -24,7 +24,7 @@ public function forSearchQuery($string, $perPage = null, $columns = [], $pageNam 'agents', 'events', 'articles', - 'digital-catalogs', + 'digital-publications', 'printed-catalogs', 'generic-pages', 'educator-resources', From 43d327c34c2a710a1ff9fb2d121bf9b89f9cb5d7 Mon Sep 17 00:00:00 2001 From: WebDevTrev <96503752+web-dev-trev@users.noreply.github.com> Date: Fri, 22 Nov 2024 14:58:11 -0600 Subject: [PATCH 2/5] Create migration to update catalog tables to publications [WEB-2971] --- ...printed_catalog_tables_to_publications.php | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 database/migrations/2024_11_22_142707_rename_digital_and_printed_catalog_tables_to_publications.php diff --git a/database/migrations/2024_11_22_142707_rename_digital_and_printed_catalog_tables_to_publications.php b/database/migrations/2024_11_22_142707_rename_digital_and_printed_catalog_tables_to_publications.php new file mode 100644 index 0000000000..c933c2b373 --- /dev/null +++ b/database/migrations/2024_11_22_142707_rename_digital_and_printed_catalog_tables_to_publications.php @@ -0,0 +1,106 @@ +dropSequenceConstraints(); + + // Rename digital sequences + DB::unprepared('ALTER SEQUENCE digital_catalog_page_id_seq RENAME TO digital_publication_page_id_seq'); + DB::unprepared('ALTER SEQUENCE digital_catalog_revisions_id_seq RENAME TO digital_publication_revisions_id_seq'); + DB::unprepared('ALTER SEQUENCE digital_catalog_slugs_id_seq RENAME TO digital_publication_slugs_id_seq'); + DB::unprepared('ALTER SEQUENCE digital_catalogs_id_seq RENAME TO digital_publications_id_seq'); + + // Rename printed sequences + DB::unprepared('ALTER SEQUENCE printed_catalog_revisions_id_seq RENAME TO printed_publication_revisions_id_seq'); + DB::unprepared('ALTER SEQUENCE printed_catalog_slugs_id_seq RENAME TO printed_publication_slugs_id_seq'); + DB::unprepared('ALTER SEQUENCE printed_catalogs_id_seq RENAME TO printed_publications_id_seq'); + + // Update sequence defaults + DB::unprepared('ALTER TABLE digital_publication_page ALTER COLUMN id SET DEFAULT nextval(\'digital_publication_page_id_seq\')'); + DB::unprepared('ALTER TABLE digital_publication_revisions ALTER COLUMN id SET DEFAULT nextval(\'digital_publication_revisions_id_seq\')'); + DB::unprepared('ALTER TABLE digital_publication_slugs ALTER COLUMN id SET DEFAULT nextval(\'digital_publication_slugs_id_seq\')'); + DB::unprepared('ALTER TABLE digital_publications ALTER COLUMN id SET DEFAULT nextval(\'digital_publications_id_seq\')'); + + DB::unprepared('ALTER TABLE printed_publication_revisions ALTER COLUMN id SET DEFAULT nextval(\'printed_publication_revisions_id_seq\')'); + DB::unprepared('ALTER TABLE printed_publication_slugs ALTER COLUMN id SET DEFAULT nextval(\'printed_publication_slugs_id_seq\')'); + DB::unprepared('ALTER TABLE printed_publications ALTER COLUMN id SET DEFAULT nextval(\'printed_publications_id_seq\')'); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // Drop existing sequence defaults + $this->dropSequenceConstraints(); + + // Rename digital sequences back + DB::unprepared('ALTER SEQUENCE digital_publication_page_id_seq RENAME TO digital_catalog_page_id_seq'); + DB::unprepared('ALTER SEQUENCE digital_publication_revisions_id_seq RENAME TO digital_catalog_revisions_id_seq'); + DB::unprepared('ALTER SEQUENCE digital_publication_slugs_id_seq RENAME TO digital_catalog_slugs_id_seq'); + DB::unprepared('ALTER SEQUENCE digital_publications_id_seq RENAME TO digital_catalogs_id_seq'); + + // Rename printed sequences back + DB::unprepared('ALTER SEQUENCE printed_publication_revisions_id_seq RENAME TO printed_catalog_revisions_id_seq'); + DB::unprepared('ALTER SEQUENCE printed_publication_slugs_id_seq RENAME TO printed_catalog_slugs_id_seq'); + DB::unprepared('ALTER SEQUENCE printed_publications_id_seq RENAME TO printed_catalogs_id_seq'); + + // Update sequence defaults + DB::unprepared('ALTER TABLE digital_publication_page ALTER COLUMN id SET DEFAULT nextval(\'digital_catalog_page_id_seq\')'); + DB::unprepared('ALTER TABLE digital_publication_revisions ALTER COLUMN id SET DEFAULT nextval(\'digital_catalog_revisions_id_seq\')'); + DB::unprepared('ALTER TABLE digital_publication_slugs ALTER COLUMN id SET DEFAULT nextval(\'digital_catalog_slugs_id_seq\')'); + DB::unprepared('ALTER TABLE digital_publications ALTER COLUMN id SET DEFAULT nextval(\'digital_catalogs_id_seq\')'); + + DB::unprepared('ALTER TABLE printed_publication_revisions ALTER COLUMN id SET DEFAULT nextval(\'printed_catalog_revisions_id_seq\')'); + DB::unprepared('ALTER TABLE printed_publication_slugs ALTER COLUMN id SET DEFAULT nextval(\'printed_catalog_slugs_id_seq\')'); + DB::unprepared('ALTER TABLE printed_publications ALTER COLUMN id SET DEFAULT nextval(\'printed_catalogs_id_seq\')'); + } + + /** + * Drop sequence constraints for all relevant tables + */ + private function dropSequenceConstraints(): void + { + $tables = [ + 'digital_publication_page', + 'digital_publication_revisions', + 'digital_publication_slugs', + 'digital_publications', + 'printed_publication_revisions', + 'printed_publication_slugs', + 'printed_publications' + ]; + + foreach ($tables as $table) { + // Get all constraints for the id column of the table + $constraints = DB::select(" + SELECT con.conname as constraint_name + FROM pg_constraint con + INNER JOIN pg_class rel ON rel.oid = con.conrelid + INNER JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace + WHERE rel.relname = ? + AND con.conname LIKE '%id%' + ", [$table]); + + // Drop each constraint found + foreach ($constraints as $constraint) { + DB::statement("ALTER TABLE {$table} DROP CONSTRAINT IF EXISTS {$constraint->constraint_name}"); + } + + // Also drop the default constraint if it exists + DB::statement("ALTER TABLE {$table} ALTER COLUMN id DROP DEFAULT"); + } + } +}; \ No newline at end of file From 5042ce50fac5cb41916d10cda9570726bdd6f330 Mon Sep 17 00:00:00 2001 From: WebDevTrev <96503752+web-dev-trev@users.noreply.github.com> Date: Fri, 22 Nov 2024 14:58:20 -0600 Subject: [PATCH 3/5] Update category tables and constraints [WEB-2971] --- ...rename_printed_catalog_category_tables.php | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 database/migrations/2024_11_22_145448_rename_printed_catalog_category_tables.php diff --git a/database/migrations/2024_11_22_145448_rename_printed_catalog_category_tables.php b/database/migrations/2024_11_22_145448_rename_printed_catalog_category_tables.php new file mode 100644 index 0000000000..72af00ce8b --- /dev/null +++ b/database/migrations/2024_11_22_145448_rename_printed_catalog_category_tables.php @@ -0,0 +1,99 @@ +dropForeign('catalog_category_printed_catalog_catalog_category_id_foreign'); + $table->dropForeign('catalog_category_printed_catalog_printed_catalog_id_foreign'); + }); + + // Drop the index + DB::statement('DROP INDEX IF EXISTS idx_catalog_category_printed_catalog_E0dSH'); + + // Rename the sequence + DB::unprepared('ALTER SEQUENCE catalog_category_printed_catalog_id_seq RENAME TO catalog_category_printed_publication_id_seq'); + + // Rename the table + Schema::rename('catalog_category_printed_catalog', 'catalog_category_printed_publication'); + + // Update column name to match new convention + Schema::table('catalog_category_printed_publication', function (Blueprint $table) { + $table->renameColumn('printed_catalog_id', 'printed_publication_id'); + }); + + // Recreate the index with new name + DB::statement('CREATE INDEX idx_catalog_category_printed_publication ON catalog_category_printed_publication (printed_publication_id, catalog_category_id)'); + + // Add back foreign key constraints with updated references + Schema::table('catalog_category_printed_publication', function (Blueprint $table) { + $table->foreign('catalog_category_id') + ->references('id') + ->on('catalog_categories') + ->onDelete('cascade'); + + $table->foreign('printed_publication_id') + ->references('id') + ->on('printed_publications') + ->onDelete('cascade'); + }); + + // Update the sequence default + DB::unprepared('ALTER TABLE catalog_category_printed_publication ALTER COLUMN id SET DEFAULT nextval(\'catalog_category_printed_publication_id_seq\')'); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // Drop foreign key constraints + Schema::table('catalog_category_printed_publication', function (Blueprint $table) { + $table->dropForeign(['catalog_category_id']); + $table->dropForeign(['printed_publication_id']); + }); + + // Drop the index + DB::statement('DROP INDEX IF EXISTS idx_catalog_category_printed_publication'); + + // Rename the sequence back + DB::unprepared('ALTER SEQUENCE catalog_category_printed_publication_id_seq RENAME TO catalog_category_printed_catalog_id_seq'); + + // Rename column back to original + Schema::table('catalog_category_printed_publication', function (Blueprint $table) { + $table->renameColumn('printed_publication_id', 'printed_catalog_id'); + }); + + // Rename the table back + Schema::rename('catalog_category_printed_publication', 'catalog_category_printed_catalog'); + + // Recreate the original index + DB::statement('CREATE INDEX idx_catalog_category_printed_catalog_E0dSH ON catalog_category_printed_catalog (printed_catalog_id, catalog_category_id)'); + + // Add back original foreign key constraints + Schema::table('catalog_category_printed_catalog', function (Blueprint $table) { + $table->foreign('catalog_category_id') + ->references('id') + ->on('catalog_categories') + ->onDelete('cascade'); + + $table->foreign('printed_catalog_id') + ->references('id') + ->on('printed_publications') + ->onDelete('cascade'); + }); + + // Update the sequence default + DB::unprepared('ALTER TABLE catalog_category_printed_catalog ALTER COLUMN id SET DEFAULT nextval(\'catalog_category_printed_catalog_id_seq\')'); + } +}; \ No newline at end of file From e18ee7e0f393d86b1849767b76def484b907f0f1 Mon Sep 17 00:00:00 2001 From: WebDevTrev <96503752+web-dev-trev@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:02:04 -0600 Subject: [PATCH 4/5] Lint code [WEB-2971] --- ...ename_digital_and_printed_catalog_tables_to_publications.php | 2 +- ...2024_11_22_145448_rename_printed_catalog_category_tables.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/database/migrations/2024_11_22_142707_rename_digital_and_printed_catalog_tables_to_publications.php b/database/migrations/2024_11_22_142707_rename_digital_and_printed_catalog_tables_to_publications.php index c933c2b373..e3c8026cfc 100644 --- a/database/migrations/2024_11_22_142707_rename_digital_and_printed_catalog_tables_to_publications.php +++ b/database/migrations/2024_11_22_142707_rename_digital_and_printed_catalog_tables_to_publications.php @@ -103,4 +103,4 @@ private function dropSequenceConstraints(): void DB::statement("ALTER TABLE {$table} ALTER COLUMN id DROP DEFAULT"); } } -}; \ No newline at end of file +}; diff --git a/database/migrations/2024_11_22_145448_rename_printed_catalog_category_tables.php b/database/migrations/2024_11_22_145448_rename_printed_catalog_category_tables.php index 72af00ce8b..ae35c0b9d9 100644 --- a/database/migrations/2024_11_22_145448_rename_printed_catalog_category_tables.php +++ b/database/migrations/2024_11_22_145448_rename_printed_catalog_category_tables.php @@ -96,4 +96,4 @@ public function down(): void // Update the sequence default DB::unprepared('ALTER TABLE catalog_category_printed_catalog ALTER COLUMN id SET DEFAULT nextval(\'catalog_category_printed_catalog_id_seq\')'); } -}; \ No newline at end of file +}; From bba12f24a8bf0cc1d00a72a25347162eecca7e45 Mon Sep 17 00:00:00 2001 From: nikhil trivedi Date: Mon, 25 Nov 2024 16:33:48 -0600 Subject: [PATCH 5/5] Update search index references [WEB-2971] --- app/Http/Controllers/SearchController.php | 2 +- app/Repositories/Api/SearchRepository.php | 2 +- app/Repositories/PublicationsRepository.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 6602be9223..84468a4df9 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -439,7 +439,7 @@ protected function buildSearchLinks($all, $active = 'all') } array_push($links, $this->buildLabel('Interactive Features', $all->total(), route('search.interactive-features', ['q' => request('q')]), $active == 'interactive-features')); - if (QueryHelpers::extractAggregation($aggregations, ['digital-publications', 'printed-catalogs'])) { + if (QueryHelpers::extractAggregation($aggregations, ['digital-publications', 'printed-publications'])) { array_push($links, $this->buildLabel('Publications', QueryHelpers::extractAggregation($aggregations, ['digital-publications', 'printed-publications']), route('search.publications', ['q' => request('q')]), $active == 'publications')); } diff --git a/app/Repositories/Api/SearchRepository.php b/app/Repositories/Api/SearchRepository.php index 675f93a110..4c52c0bcb1 100644 --- a/app/Repositories/Api/SearchRepository.php +++ b/app/Repositories/Api/SearchRepository.php @@ -25,7 +25,7 @@ public function forSearchQuery($string, $perPage = null, $columns = [], $pageNam 'events', 'articles', 'digital-publications', - 'printed-catalogs', + 'printed-publications', 'generic-pages', 'educator-resources', 'press-releases', diff --git a/app/Repositories/PublicationsRepository.php b/app/Repositories/PublicationsRepository.php index ee37b2b684..7d7d9c91f2 100644 --- a/app/Repositories/PublicationsRepository.php +++ b/app/Repositories/PublicationsRepository.php @@ -10,7 +10,7 @@ class PublicationsRepository public function searchApi($string, $perPage = null, $page = null, $columns = []) { // Find top-level catalogs that match the search - $search = Search::query()->search($string)->published()->resources(['digital-catalogs', 'printed-catalogs']); + $search = Search::query()->search($string)->published()->resources(['digital-publications', 'printed-publications']); $results = $search->getSearch($perPage, $columns, null, $page); // Now find matching `articles` and add them to the catalogs