2016-11-03 12:29:30 +05:30
|
|
|
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
|
|
|
# for more information on how to write migrations for GitLab.
|
|
|
|
|
2019-01-03 12:48:30 +05:30
|
|
|
class PrecalculateTrendingProjects < ActiveRecord::Migration
|
2016-11-03 12:29:30 +05:30
|
|
|
include Gitlab::Database::MigrationHelpers
|
|
|
|
|
|
|
|
DOWNTIME = false
|
|
|
|
|
|
|
|
def up
|
|
|
|
create_table :trending_projects do |t|
|
|
|
|
t.references :project, index: true, foreign_key: { on_delete: :cascade }, null: false
|
|
|
|
end
|
|
|
|
|
|
|
|
timestamp = connection.quote(1.month.ago)
|
|
|
|
|
|
|
|
# We're hardcoding the visibility level (public) here so that if it ever
|
|
|
|
# changes this query doesn't suddenly use the new value (which may break
|
|
|
|
# later migrations).
|
|
|
|
visibility = 20
|
|
|
|
|
|
|
|
execute <<-EOF.strip_heredoc
|
|
|
|
INSERT INTO trending_projects (project_id)
|
|
|
|
SELECT project_id
|
|
|
|
FROM notes
|
|
|
|
INNER JOIN projects ON projects.id = notes.project_id
|
|
|
|
WHERE notes.created_at >= #{timestamp}
|
|
|
|
AND notes.system IS FALSE
|
|
|
|
AND projects.visibility_level = #{visibility}
|
|
|
|
GROUP BY project_id
|
|
|
|
ORDER BY count(*) DESC
|
|
|
|
LIMIT 100;
|
|
|
|
EOF
|
|
|
|
end
|
|
|
|
|
|
|
|
def down
|
|
|
|
drop_table :trending_projects
|
|
|
|
end
|
|
|
|
end
|