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.
43 lines
1.2 KiB
43 lines
1.2 KiB
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
|