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
 |