You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.4 KiB
50 lines
1.4 KiB
class Competitions::CompetitionTeamsController < Competitions::BaseController
|
|
def index
|
|
admin_or_business? ? all_competition_teams : user_competition_teams
|
|
end
|
|
|
|
def create
|
|
team = current_competition.competition_teams.new(user: current_user)
|
|
Competitions::SaveTeamService.call(team, save_params)
|
|
render_ok
|
|
end
|
|
|
|
def update
|
|
team = current_competition.competition_teams.where(user: current_user).find(params[:id])
|
|
Competitions::SaveTeamService.call(team, save_params)
|
|
render_ok
|
|
end
|
|
|
|
def join
|
|
Competitions::JoinTeamService.call(current_competition, current_user, params)
|
|
render_ok
|
|
rescue Competitions::JoinTeamService::Error => ex
|
|
render_error(ex.message)
|
|
end
|
|
|
|
private
|
|
|
|
def all_competition_teams
|
|
teams = current_competition.competition_teams
|
|
|
|
keyword = params[:keyword].to_s.strip
|
|
if keyword.present?
|
|
teams = teams.joins(users: { user_extension: :school }).where('schools.name LIKE ?', "%#{keyword}%")
|
|
end
|
|
|
|
@count = teams.count
|
|
@teams = paginate(teams.includes(:user, users: :user_extension))
|
|
end
|
|
|
|
def user_competition_teams
|
|
teams = current_competition.competition_teams
|
|
teams = teams.joins(:team_members).where(team_members: { user_id: current_user.id })
|
|
@teams = teams.includes(:user, users: :user_extension).to_a
|
|
@count = @teams.size
|
|
end
|
|
|
|
def save_params
|
|
params.permit(:name, teacher_ids: [], member_ids: [])
|
|
end
|
|
end
|