#coding=utf-8 module Mobile module Apis class Courses < Grape::API resource :courses do def self.get_service CoursesService.new end desc "获取所有课程" params do optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表' requires :per_page_count, type: Integer, desc: '每页总数' requires :page, type: Integer, desc: '当前页码' optional :token, type: String end get do authenticate! cs = CoursesService.new courses = cs.user_courses_list(current_user) present :data, courses, with: Mobile::Entities::Course present :status, 0 end desc "新建课程" #current_user当前用户对象(不是id) # params[:course][:name]:课程名称 #params[:course][:password]:密码 #params[:course][:description]:描述 #params[:course][:is_public]:是否公开1公开,0私有 #params[:course][:open_student]:是否公开学生列表1公开,0不公开,不公开时非课程成员无法看到学生列表 #params[:course][:course_type]:暂时默认给1值。 #params[:term]:学期(秋季学期或春季学期) #params[:time]: 年份(例:2014) #params[:setup_time]:暂不传(貌似已经没用了) #params[:endup_time]: 暂不传(貌似已经没用了) #params[:class_period]:学时总数 params do requires :token, type: String requires :name, type: String, desc: '课程名称' requires :password, type: String, desc: '密码' requires :description, type: String, desc: '描述' requires :is_public, type: Integer, desc: '是否公开 1公开 0私有' requires :open_student, type: Integer, desc: '是否公开学生列表1公开,0不公开,不公开时非课程成员无法看到学生列表' requires :course_type, type:Integer, desc: '暂时传1' requires :term, type: String, desc: '学期(秋季学期或春季学期)' requires :time, type: String, desc: '年份' requires :class_period, type: String, desc: '学时总数' end post do authenticate! cs = CoursesService.new cs_params = { course: params.reject{|k,v| [:term,:time,:class_period].include?(k)}, term: params[:term], time: params[:time], class_period: params[:class_period] } courses = cs.create_course(cs_params, current_user) present :data, courses, with: Mobile::Entities::Course present :status, 0 end desc "编辑课程" params do requires :token, type: String requires :course_id, type: Integer, desc: '课程id' requires :name, type: String, desc: '课程名称' requires :password, type: String, desc: '密码' requires :description, type: String, desc: '描述' requires :is_public, type: Integer, desc: '是否公开 1公开 0私有' requires :open_student, type: Integer, desc: '是否公开学生列表1公开,0不公开,不公开时非课程成员无法看到学生列表' requires :course_type, type:Integer, desc: '暂时传1' requires :term, type: String, desc: '学期(秋季学期或春季学期)' requires :time, type: String, desc: '年份' requires :class_period, type: String, desc: '学时总数' end put do authenticate! cs = CoursesService.new cs_params = { course: params.reject{|k,v| [:term,:time,:class_period].include?(k)}, term: params[:term], time: params[:time], class_period: params[:class_period] } course = ::Course.find(params[:course_id]) # 如果没有传密码过来,那就把原来的密码给上,不然会不更新 if params[:password].nil? || params[:password].blank? cs_params[:course][:password] = course[:password] end cs.edit_course_authorize(current_user,course) course = cs.edit_course(cs_params, course,current_user) present :data, course, with: Mobile::Entities::Course present :status, 0 end post do end desc "加入课程" params do requires :token, type: String requires :invite_code, type: String, desc: '邀请码' end post "join" do authenticate! cs = CoursesService.new status = cs.join_course({role: "10", openid: params[:openid], invite_code: params[:invite_code]}, current_user) { status: status[:state], message:CoursesService::JoinCourseError.message(status[:state]) } end desc "退出课程" params do requires :token, type: String end delete ":id" do authenticate! cs = CoursesService.new status = cs.exit_course({:object_id => params[:id]}, current_user) out = {status: status} message = case status when 0; "退出成功" when 1; "您不在课程中" when 2; "您还未登录" else; "未知错误,请稍后再试" end out.merge(message: message) end desc "搜索课程" params do requires :name, type: String, desc: "课程名" optional :token, type: String end get 'search' do cs = CoursesService.new courses = cs.search_course(params,current_user.nil? ? User.find(2):current_user) present :data, courses, with: Mobile::Entities::Course present :status, 0 end desc "课程老师列表" params do requires :token, type: String requires :course_id, type: Integer, desc: "课程id" end get 'teachers' do cs = CoursesService.new teachers = cs.course_teacher_or_student_list({role: '1'}, params[:course_id],current_user) present :data, teachers, with: Mobile::Entities::User present :status, 0 end desc "课程学生列表" params do requires :token, type: String requires :course_id, type: Integer, desc: "课程id" end get 'students' do cs = CoursesService.new students = cs.course_teacher_or_student_list({role: '2'}, params[:course_id],current_user) present :data, students, with: Mobile::Entities::User present :status, 0 end desc "设置教辅" params do requires :token,type:String requires :user_id,type:Integer,desc: '用户id' requires :course_id,type:Integer,desc:'课程id' end get 'set_user_as_assitant' do cs = CoursesService.new cs.set_as_assitant_teacher params present :status, 0 end desc "删除教辅" params do requires :token,type:String requires :user_id,type:Integer,desc: '用户id' requires :course_id,type:Integer,desc:'课程id' end get 'del_user_as_assitant' do cs = CoursesService.new cs.del_assitant_teacher params present :status, 0 end desc "返回单个课程" params do requires :id, type: Integer optional :token, type: String end route_param :id do get do authenticate! cs = CoursesService.new course = cs.show_course(params,(current_user.nil? ? User.find(2):current_user)) #course = Course.find(params[:id]) present :data, course, with: Mobile::Entities::Course { status: 0} end end desc "课程作业列表" params do requires :token, type: String end get "homeworks/:id" do cs = CoursesService.new homeworks = cs.homework_list params,current_user present :data, homeworks, with: Mobile::Entities::Homework present :status, 0 end desc "课程通知列表" params do optional :token, type: String end get ":course_id/news" do cs = CoursesService.new news = cs.course_news_list params,current_user.nil? ? User.find(2):current_user present :data, news, with: Mobile::Entities::News present :status, 0 end desc "显示课程通知" params do optional :token, type: String end get "news/:id" do cs = CoursesService.new cs.show_course_news_authorize(current_user.nil? ? User.find(2):current_user) news = cs.show_course_news params,current_user.nil? ? User.find(2):current_user present :data, news, with: Mobile::Entities::News present :status, 0 end desc '用户课程动态' params do requires :token, type: String end get "course_dynamic/:id" do cs = CoursesService.new count = cs.all_course_dynamics(params,current_user) present :data, count, with: Mobile::Entities::CourseDynamic present :status, 0 end desc '课程课件' params do requires :token, type: String requires :course_id,type: Integer,desc: '课程id' optional :name,type:String,desc:'课件名称可能包含的字符' end post ":course_id/attachments" do cs = CoursesService.new count = cs.course_attachments params present :data, count, with: Mobile::Entities::Attachment present :status, 0 end desc '课程学生' params do requires :token,type:String requires :course_id,type:Integer,desc: '课程id' optional :name,type:String,desc:'学生的姓名或者登录名或者学号可能包含的字符' end get ":course_id/members" do cs = CoursesService.new count = cs.course_members params # 我如果在学生当中,那么我将放在第一位 count.each do |m| if m.user.id == current_user.id count.delete m count.unshift m end end present :data, count, with: Mobile::Entities::Member present :status, 0 end desc '查看用户历次作业成绩' params do requires :token,type:String requires :member_id,type:Integer,desc:'课程member_id' optional :homeworkName,type:String,desc:'作业名称以及作业名称可能包含的字符' end get '/show_member_score/:member_id' do cs = CoursesService.new homeworkscore = cs.show_member_score params present :data,homeworkscore,with: Mobile::Entities::Homeworkscore present :status,0 end desc '发布课程通知' params do requires :token,type:String requires :course_id,type:Integer,desc:'课程id' requires :title,type:String,desc:'通知标题' requires :desc,type:String,desc:'通知描述' end post ':course_id/create_course_notice' do cs = CoursesService.new news = cs.create_course_notice params,current_user present :data,news,with:Mobile::Entities::News present :status,0 end desc '总成绩 or 活跃度列表' params do requires :token,type:String requires :course_id,type:Integer,desc:'课程id' optional :page,type:Integer,desc:'页码' optional :type,type:Integer,desc:'0是活跃度,1是成绩' end get ':course_id/students_score_list' do cs = CoursesService.new news = cs.students_score_list params,current_user present :data,news[:user_list],with:Mobile::Entities::User present :maxSize,news[:max_size] present :status,0 end desc '课程某次作业提交列表 并显示成绩' params do requires :token,type:String requires :course_id,type:Integer,desc:'课程id' requires :homework_id,type:Integer,desc:'作业id' optional :page,type:Integer,desc:'页码' end get ':course_id/student_works_list' do cs = CoursesService.new student_works = cs.student_work_list params,current_user present :data,student_works,with:Mobile::Entities::StudentWork present :status,0 end desc '讨论区信息' params do requires :token,type:String requires :course_id,type:Integer,desc:'课程id' optional :page,type:Integer,desc:'页码' end get ':course_id/board_message_list' do cs = CoursesService.new board_messages_list = cs.board_message_list params,current_user present :data,board_messages_list.all,with:Mobile::Entities::Message present :status,0 end desc '讨论区某主题的回复列表' params do requires :token,type:String requires :board_id,type:Integer,desc:'讨论区id' requires :msg_id,type:Integer,desc:'讨论主题id' optional :page,type:Integer,desc:'页码' end get ':board_id/board_message_reply_list' do cs = Courses.get_service board_messages_list = cs.board_message_reply_list params,current_user present :data,board_messages_list.all,with:Mobile::Entities::Message present :status,0 end desc '讨论区回复' params do requires :token,type:String requires :board_id,type:Integer,desc:'讨论区id' requires :parent_id,type:Integer,desc:'本回复父id' requires :subject,type:String,desc:'本回复主题' requires :content,type:String,desc:'本回复内容' requires :root_id,type:Integer,desc:'本回复根id' requires :quote,type:String,desc:'本回复引用内容' end post ':board_id/board_message_reply' do cs = Courses.get_service board_messages = cs.board_message_reply params,current_user present :data,board_messages,with:Mobile::Entities::Message present :status,0 end desc '获取测验列表' params do requires :token, type:String end get ':course_id/exercises' do authenticate! exercises = Course.find(params[:course_id]).exercises present :data,exercises,with:Mobile::Entities::Exercise present :status,0 end desc '删除课程' params do requires :token, type: String end post ':course_id/del' do authenticate! c = Course.find(params[:course_id]) if c.members.count > 1 {status: -1, message: '已经有成员加入,不能删除'} else c.delete! present :status,0 end end end end end end