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.
71 lines
2.0 KiB
71 lines
2.0 KiB
class Competitions::CompetitionTeamsController < Competitions::BaseController
|
|
def index
|
|
admin_or_business? ? all_competition_teams : user_competition_teams
|
|
end
|
|
|
|
def create
|
|
if current_competition.personal? # 个人赛报名
|
|
Competitions::CreatePersonalTeamService.call(current_competition, current_user)
|
|
else
|
|
team = current_competition.competition_teams.new(user: current_user)
|
|
Competitions::SaveTeamService.call(team, save_params)
|
|
end
|
|
render_ok
|
|
|
|
rescue Competitions::CreatePersonalTeamService::Error => ex
|
|
render_error(ex.message)
|
|
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
|
|
|
|
def leave
|
|
team = current_competition.competition_teams.find(params[:id])
|
|
member = team.team_members.find_by(user_id: current_user.id)
|
|
return render_error('您不是该战队的成员') if member.blank?
|
|
|
|
if member.user_id == team.user_id
|
|
team.destroy! # 队长退出,战队解散
|
|
else
|
|
member.destroy!
|
|
end
|
|
|
|
render_ok
|
|
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: :school }))
|
|
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: :school }).to_a
|
|
@count = @teams.size
|
|
end
|
|
|
|
def save_params
|
|
params.permit(:name, teacher_ids: [], member_ids: [])
|
|
end
|
|
end
|