419 lines
15 KiB
Ruby
419 lines
15 KiB
Ruby
#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,user: current_user
|
||
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,user: current_user
|
||
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,user: current_user
|
||
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,user: current_user
|
||
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
|
||
end
|
||
route_param :id do
|
||
get do
|
||
course = Course.find(params[:id])
|
||
present :data, course, with: Mobile::Entities::Course,user: current_user
|
||
{ 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!
|
||
|
||
course = Course.find(params[:course_id])
|
||
exercises = course.exercises.where("exercise_status <> 1").order("created_at desc")
|
||
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
|
||
|