Files
gitlabhq/app/controllers/users_controller.rb
Yorick Peterse 1cdee35f60 Merge branch 'atom-feed-latest-update' into 'master'
Improve performance of user profiles, finding groups, and finding projects

This MR improves the following:

* Rendering of profile pages and Atom feeds
* Finding groups (using GroupsFinder & friends)
* Finding projects (using ProjectsFinder & friends)

Initially this MR was intended to only improve rendering of Atom feeds, but over time other fixes were introduced as well as the same code was the cause of all these problems.

See merge request !1790
2015-11-20 11:02:27 +01:00

75 lines
1.7 KiB
Ruby

class UsersController < ApplicationController
skip_before_action :authenticate_user!
before_action :set_user
def show
@contributed_projects = contributed_projects.joined(@user).reject(&:forked?)
@projects = PersonalProjectsFinder.new(@user).execute(current_user)
@groups = JoinedGroupsFinder.new(@user).execute(current_user)
respond_to do |format|
format.html
format.atom do
load_events
render layout: false
end
format.json do
load_events
pager_json("events/_events", @events.count)
end
end
end
def calendar
calendar = contributions_calendar
@timestamps = calendar.timestamps
@starting_year = calendar.starting_year
@starting_month = calendar.starting_month
render 'calendar', layout: false
end
def calendar_activities
@calendar_date = Date.parse(params[:date]) rescue nil
@events = []
if @calendar_date
@events = contributions_calendar.events_by_date(@calendar_date)
end
render 'calendar_activities', layout: false
end
private
def set_user
@user = User.find_by_username!(params[:username])
end
def contributed_projects
ContributedProjectsFinder.new(@user).execute(current_user)
end
def contributions_calendar
@contributions_calendar ||= Gitlab::ContributionsCalendar.
new(contributed_projects.reject(&:forked?), @user)
end
def load_events
# Get user activity feed for projects common for both users
@events = @user.recent_events.
merge(projects_for_current_user).
references(:project).
with_associations.
limit_recent(20, params[:offset])
end
def projects_for_current_user
ProjectsFinder.new.execute(current_user)
end
end