class Ecs::CreateCourseTargetsService < ApplicationService
  include AcceptsNestedAttributesHelper

  attr_reader :ec_course, :params

  def initialize(ec_course, params)
    @ec_course = ec_course
    @params    = params
  end

  def call
    accepts_attributes = build_accepts_nested_attributes(
      ec_course, ec_course.ec_course_targets,
      params[:course_targets],
      &method(:deal_course_target_attribute!) # 相当于方法后面写代码块，然后把参数传入方法: a(&method(:b)) == a { |c| b(c) }
    )

    ec_course.assign_attributes(ec_course_targets_attributes: accepts_attributes)
    ec_course.save!
    ec_course
  end

  private

  def deal_course_target_attribute!(target)
    target[:content] = target[:content].to_s.strip
    target[:weight]  = target[:weight].to_f.round(2)
    target[:ec_graduation_subitem_course_targets_attributes] =
      [{ ec_graduation_subitem_id: target.delete(:graduation_subitem_id) }]
  end
end