From 99f6dfc88b70a531b695d9d54df2c6bb28ac293e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20W=C3=A4lter?= <jonas.waelter@noser.com> Date: Fri, 11 Feb 2022 10:16:30 +0100 Subject: [PATCH] Change the order column of topics to non_private_projects_count Changelog: changed --- app/finders/projects/topics_finder.rb | 2 +- app/graphql/resolvers/topics_resolver.rb | 4 ++-- app/models/projects/topic.rb | 4 ++-- ..._populate_topics_non_private_projects_count.rb | 15 +++++++++++++++ db/schema_migrations/20220211090920 | 1 + spec/finders/projects/topics_finder_spec.rb | 6 +++--- spec/graphql/resolvers/topics_resolver_spec.rb | 6 +++--- spec/models/projects/topic_spec.rb | 12 ++++++------ spec/requests/api/topics_spec.rb | 6 +++--- 9 files changed, 36 insertions(+), 20 deletions(-) create mode 100644 db/migrate/20220211090920_cleanup_populate_topics_non_private_projects_count.rb create mode 100644 db/schema_migrations/20220211090920 diff --git a/app/finders/projects/topics_finder.rb b/app/finders/projects/topics_finder.rb index 7c3abc27cf73..c26b166a786c 100644 --- a/app/finders/projects/topics_finder.rb +++ b/app/finders/projects/topics_finder.rb @@ -12,7 +12,7 @@ def initialize(params: {}) end def execute - topics = Projects::Topic.order_by_total_projects_count + topics = Projects::Topic.order_by_non_private_projects_count by_search(topics) end diff --git a/app/graphql/resolvers/topics_resolver.rb b/app/graphql/resolvers/topics_resolver.rb index d8199f3d89b3..68e2ff692827 100644 --- a/app/graphql/resolvers/topics_resolver.rb +++ b/app/graphql/resolvers/topics_resolver.rb @@ -10,9 +10,9 @@ class TopicsResolver < BaseResolver def resolve(**args) if args[:search].present? - ::Projects::Topic.search(args[:search]).order_by_total_projects_count + ::Projects::Topic.search(args[:search]).order_by_non_private_projects_count else - ::Projects::Topic.order_by_total_projects_count + ::Projects::Topic.order_by_non_private_projects_count end end end diff --git a/app/models/projects/topic.rb b/app/models/projects/topic.rb index 78bc2df2e1ed..6f9732588c0a 100644 --- a/app/models/projects/topic.rb +++ b/app/models/projects/topic.rb @@ -13,12 +13,12 @@ class Topic < ApplicationRecord has_many :project_topics, class_name: 'Projects::ProjectTopic' has_many :projects, through: :project_topics - scope :order_by_total_projects_count, -> { order(total_projects_count: :desc).order(id: :asc) } + scope :order_by_non_private_projects_count, -> { order(non_private_projects_count: :desc).order(id: :asc) } scope :reorder_by_similarity, -> (search) do order_expression = Gitlab::Database::SimilarityScore.build_expression(search: search, rules: [ { column: arel_table['name'] } ]) - reorder(order_expression.desc, arel_table['total_projects_count'].desc, arel_table['id']) + reorder(order_expression.desc, arel_table['non_private_projects_count'].desc, arel_table['id']) end class << self diff --git a/db/migrate/20220211090920_cleanup_populate_topics_non_private_projects_count.rb b/db/migrate/20220211090920_cleanup_populate_topics_non_private_projects_count.rb new file mode 100644 index 000000000000..5ab8feb21951 --- /dev/null +++ b/db/migrate/20220211090920_cleanup_populate_topics_non_private_projects_count.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CleanupPopulateTopicsNonPrivateProjectsCount < Gitlab::Database::Migration[1.0] + MIGRATION = 'PopulateTopicsNonPrivateProjectsCount' + + disable_ddl_transaction! + + def up + finalize_background_migration(MIGRATION) + end + + def down + # no-op + end +end diff --git a/db/schema_migrations/20220211090920 b/db/schema_migrations/20220211090920 new file mode 100644 index 000000000000..1f08b66e5083 --- /dev/null +++ b/db/schema_migrations/20220211090920 @@ -0,0 +1 @@ +644d38e401ac8179777cb9d3c5fefca2fb55e0c409197bb2d222f7e96e5dd42f \ No newline at end of file diff --git a/spec/finders/projects/topics_finder_spec.rb b/spec/finders/projects/topics_finder_spec.rb index 28802c5d49e5..3812f0757bcb 100644 --- a/spec/finders/projects/topics_finder_spec.rb +++ b/spec/finders/projects/topics_finder_spec.rb @@ -9,9 +9,9 @@ let!(:topic2) { create(:topic, name: 'topicC') } let!(:topic3) { create(:topic, name: 'topicA') } - let!(:project1) { create(:project, namespace: user.namespace, topic_list: 'topicC, topicA, topicB') } - let!(:project2) { create(:project, namespace: user.namespace, topic_list: 'topicC, topicA') } - let!(:project3) { create(:project, namespace: user.namespace, topic_list: 'topicC') } + let!(:project1) { create(:project, :public, namespace: user.namespace, topic_list: 'topicC, topicA, topicB') } + let!(:project2) { create(:project, :public, namespace: user.namespace, topic_list: 'topicC, topicA') } + let!(:project3) { create(:project, :public, namespace: user.namespace, topic_list: 'topicC') } describe '#execute' do it 'returns topics' do diff --git a/spec/graphql/resolvers/topics_resolver_spec.rb b/spec/graphql/resolvers/topics_resolver_spec.rb index 3ff1dabc9279..89f4583bce88 100644 --- a/spec/graphql/resolvers/topics_resolver_spec.rb +++ b/spec/graphql/resolvers/topics_resolver_spec.rb @@ -6,9 +6,9 @@ include GraphqlHelpers describe '#resolve' do - let!(:topic1) { create(:topic, name: 'GitLab', total_projects_count: 1) } - let!(:topic2) { create(:topic, name: 'git', total_projects_count: 2) } - let!(:topic3) { create(:topic, name: 'topic3', total_projects_count: 3) } + let!(:topic1) { create(:topic, name: 'GitLab', non_private_projects_count: 1) } + let!(:topic2) { create(:topic, name: 'git', non_private_projects_count: 2) } + let!(:topic3) { create(:topic, name: 'topic3', non_private_projects_count: 3) } it 'finds all topics' do expect(resolve_topics).to eq([topic3, topic2, topic1]) diff --git a/spec/models/projects/topic_spec.rb b/spec/models/projects/topic_spec.rb index 397c65f4d5c5..1915dbe9fcc3 100644 --- a/spec/models/projects/topic_spec.rb +++ b/spec/models/projects/topic_spec.rb @@ -28,16 +28,16 @@ end describe 'scopes' do - describe 'order_by_total_projects_count' do + describe 'order_by_non_private_projects_count' do let!(:topic1) { create(:topic, name: 'topicB') } let!(:topic2) { create(:topic, name: 'topicC') } let!(:topic3) { create(:topic, name: 'topicA') } - let!(:project1) { create(:project, topic_list: 'topicC, topicA, topicB') } - let!(:project2) { create(:project, topic_list: 'topicC, topicA') } - let!(:project3) { create(:project, topic_list: 'topicC') } + let!(:project1) { create(:project, :public, topic_list: 'topicC, topicA, topicB') } + let!(:project2) { create(:project, :public, topic_list: 'topicC, topicA') } + let!(:project3) { create(:project, :public, topic_list: 'topicC') } - it 'sorts topics by total_projects_count' do - topics = described_class.order_by_total_projects_count + it 'sorts topics by non_private_projects_count' do + topics = described_class.order_by_non_private_projects_count expect(topics.map(&:name)).to eq(%w[topicC topicA topicB topic]) end diff --git a/spec/requests/api/topics_spec.rb b/spec/requests/api/topics_spec.rb index 70eee8a1af90..9c6b47300d0e 100644 --- a/spec/requests/api/topics_spec.rb +++ b/spec/requests/api/topics_spec.rb @@ -7,9 +7,9 @@ let_it_be(:file) { fixture_file_upload('spec/fixtures/dk.png') } - let_it_be(:topic_1) { create(:topic, name: 'Git', total_projects_count: 1, avatar: file) } - let_it_be(:topic_2) { create(:topic, name: 'GitLab', total_projects_count: 2) } - let_it_be(:topic_3) { create(:topic, name: 'other-topic', total_projects_count: 3) } + let_it_be(:topic_1) { create(:topic, name: 'Git', total_projects_count: 1, non_private_projects_count: 1, avatar: file) } + let_it_be(:topic_2) { create(:topic, name: 'GitLab', total_projects_count: 2, non_private_projects_count: 2) } + let_it_be(:topic_3) { create(:topic, name: 'other-topic', total_projects_count: 3, non_private_projects_count: 3) } let_it_be(:admin) { create(:user, :admin) } let_it_be(:user) { create(:user) } -- GitLab