From a3df87b7a5613f7bf8b144a53ea9f2370e43568c Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 14 Nov 2019 19:20:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=AF=BE=E5=A0=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/weapps/courses_controller.rb | 21 +++++++++++++- app/controllers/weapps/homes_controller.rb | 2 +- app/forms/weapps/create_course_form.rb | 20 +++++++++++++ app/services/weapps/create_course_service.rb | 30 ++++++++++++++++++++ app/views/weapps/homes/show.json.jbuilder | 1 + config/routes.rb | 2 ++ 6 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 app/forms/weapps/create_course_form.rb create mode 100644 app/services/weapps/create_course_service.rb diff --git a/app/controllers/weapps/courses_controller.rb b/app/controllers/weapps/courses_controller.rb index 41e00f63e..c7ecb89c9 100644 --- a/app/controllers/weapps/courses_controller.rb +++ b/app/controllers/weapps/courses_controller.rb @@ -1,8 +1,27 @@ class Weapps::CoursesController < Weapps::BaseController - before_action :require_wechat_login! + # before_action :require_wechat_login! def create return render_error("只有老师身份才能创建课堂") unless current_user.is_teacher? + course = Course.new(tea_id: current_user.id) + Weapps::CreateCourseService.call(course, course_params) + render_ok + rescue ApplicationService::Error => ex + render_error(ex.message) + end + + def edit + + end + + def update + + end + + private + + def course_params + params.permit(:name, :course_list_name, :credit, course_module_types: []) end end \ No newline at end of file diff --git a/app/controllers/weapps/homes_controller.rb b/app/controllers/weapps/homes_controller.rb index a164adcfc..a99bb15c2 100644 --- a/app/controllers/weapps/homes_controller.rb +++ b/app/controllers/weapps/homes_controller.rb @@ -1,5 +1,5 @@ class Weapps::HomesController < Weapps::BaseController - # before_action :require_wechat_login! + before_action :require_wechat_login! def show # banner diff --git a/app/forms/weapps/create_course_form.rb b/app/forms/weapps/create_course_form.rb new file mode 100644 index 000000000..9244096ab --- /dev/null +++ b/app/forms/weapps/create_course_form.rb @@ -0,0 +1,20 @@ +class Weapps::CreateCourseForm + include ActiveModel::Model + + attr_accessor :course + attr_accessor :name, :course_list_name, :credit, :course_module_types + + validates :name, presence: true + validates :course_list_name, presence: true + + validate :course_name_prefix + validate :check_course_modules + + def course_name_prefix + raise '课堂名称应以课程名称开头' unless name.index(course_list_name) && name.index(course_list_name) == 0 + end + + def check_course_modules + raise '请至少添加一个课堂模块' if course_module_types.blank? + end +end \ No newline at end of file diff --git a/app/services/weapps/create_course_service.rb b/app/services/weapps/create_course_service.rb new file mode 100644 index 000000000..d7dd81ffe --- /dev/null +++ b/app/services/weapps/create_course_service.rb @@ -0,0 +1,30 @@ +class Weapps::CreateCourseService < ApplicationService + attr_reader :course, :params + + def initialize(course, params) + @course = course + @params = params + end + + def call + Weapps::CreateCourseForm.new(form_params).validate! + + ActiveRecord::Base.transaction do + course.name = params[:name].to_s.strip + course.school_id = course.teacher&.school_id + course.is_public = 0 + course.credit = params[:credit].blank? ? nil : params[:credit] + course.save! + + course.generate_invite_code + CourseMember.create!(course_id: course.id, user_id: course.tea_id, role: 1) + course.create_course_modules(params[:course_module_types]) + end + end + + private + + def form_params + params.merge(course: course) + end +end \ No newline at end of file diff --git a/app/views/weapps/homes/show.json.jbuilder b/app/views/weapps/homes/show.json.jbuilder index 7d14da6ed..089c70dbb 100644 --- a/app/views/weapps/homes/show.json.jbuilder +++ b/app/views/weapps/homes/show.json.jbuilder @@ -20,6 +20,7 @@ json.course_count @course_count json.courses @courses.each do |course| json.(course, :id, :name, :visits, :course_members_count) json.creator course.teacher.real_name + json.avatar_url url_to_avatar(course.teacher) json.school course.school&.name course_member = @category == "study" ? course.students.where(user_id: @user.id).first : course.teachers.where(user_id: @user.id).first json.sticky course_member.sticky diff --git a/config/routes.rb b/config/routes.rb index 930349d9b..6b9c83bc8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -879,6 +879,8 @@ Rails.application.routes.draw do resources :course_stickies, only: [:create] do post :cancel_sticky, on: :collection end + + resources :courses, only: [:create, :update, :edit] end resources :users_for_partners, only: [:index]