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.
41 lines
1.5 KiB
41 lines
1.5 KiB
class Admins::CompetitionNavSettingService < ApplicationService
|
|
attr_reader :competition, :params
|
|
|
|
def initialize(competition, params)
|
|
@params = params
|
|
@competition = competition
|
|
end
|
|
|
|
def call
|
|
ActiveRecord::Base.transaction do
|
|
|
|
# hidden_module_type = competition.all_module_types - params[:module_type]
|
|
# competition.competition_modules.where(module_type: hidden_module_type).update_all(hidden: 1)
|
|
|
|
old_module_ids = competition.competition_modules.pluck(:id)
|
|
module_ids = []
|
|
params[:navbar].each do |nav|
|
|
if nav["module_id"]
|
|
module_ids << nav["module_id"].to_i
|
|
com_module = competition.competition_modules.find_by(id: nav["module_id"])
|
|
else
|
|
com_module = CompetitionModule.create!(competition_id: competition.id, module_type: 'md')
|
|
end
|
|
com_module.update_attributes!(hidden: nav["hidden"] && nav["hidden"].to_i == 0 ? 0 : 1, position: nav["position"] ? nav["position"] : params[:navbar].length, name: nav["name"], url: nav["url"])
|
|
end
|
|
|
|
delete_module_ids = old_module_ids - module_ids
|
|
competition.competition_modules.where(id: delete_module_ids).destroy_all
|
|
|
|
competition.update_attributes!(enroll_end_time: params[:enroll_end_time])
|
|
if params[:competition_staffs].present?
|
|
competition.competition_staffs.delete_all
|
|
params[:competition_staffs].each_with_index do |staff_params, index|
|
|
competition.competition_staffs.create!(staff_params.merge(position: index + 1))
|
|
end
|
|
end
|
|
|
|
competition
|
|
end
|
|
end
|
|
end |