class MigrateCourseMembers < ActiveRecord::Migration[5.2]
  def change
    # add_column :course_groups, :position, :integer, default: 0

    Course.find_each do |course|
      position = 1
      course.course_groups.reorder("CONVERT(course_groups.name USING gbk) COLLATE gbk_chinese_ci ASC").each do |group|
        group.update_attribute(:position, position)
        position += 1
      end
    end


    add_column :course_groups, :course_members_count, :integer, default: 0

    CourseGroup.find_each do |g|
      CourseGroup.reset_counters g.id, :course_members
    end

    ActiveRecord::Base.transaction do
      begin
        Member.where("course_id != -1").includes(:member_roles).find_each(batch_size: 500) do |member|
          puts(member.id)
          member.member_roles.each do |role|
            course_member_role = role.role_id == 3 ? 1 : (role.role_id == 9 ? 2 : (role.role_id == 7 ? 3 : 4))
            member_group_id = role.role_id == 10 ? member.course_group_id : 0
            CourseMember.create!(course_id: member.course_id, user_id: member.user_id, course_group_id: member_group_id,
                                 graduation_group_id: member.graduation_group_id, role: course_member_role, is_active: role.is_current)
          end
        end
      rescue Exception => e
        uid_logger_error(e.message)
        tip_exception("migrate_course_members 迁移失败!")
        raise ActiveRecord::Rollback
      end
    end
  end
end