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.
educoder/app/services/ecs/create_course_service.rb

43 lines
1.2 KiB

6 years ago
class Ecs::CreateCourseService < ApplicationService
Error = Class.new(StandardError)
attr_reader :ec_year, :params
def initialize(ec_year, params)
@ec_year = ec_year
@params = params
end
def call
name = params[:name].to_s.strip
if ec_year.ec_courses.exists?(name: name)
raise Error, '课程名称重复'
end
ec_course = nil
ActiveRecord::Base.transaction do
ec_course = ec_year.ec_courses.create!(name: name)
create_default_score_levels!(ec_course)
end
ec_course
end
private
def create_default_score_levels!(ec_course)
EcScoreLevel.bulk_insert(:ec_course_id, :score, :level, :position) do |worker|
[
{ ec_course_id: ec_course.id, score: 90, level: '优秀', position: 1 },
{ ec_course_id: ec_course.id, score: 80, level: '良好', position: 2 },
{ ec_course_id: ec_course.id, score: 70, level: '中等', position: 3 },
{ ec_course_id: ec_course.id, score: 60, level: '及格', position: 4 },
{ ec_course_id: ec_course.id, score: 60, level: '不及格', position: 5 },
].each do |attributes|
worker.add attributes
end
end
end
end