socialforge/app/api/mobile/apis/courses.rb

749 lines
25 KiB
Ruby
Raw Normal View History

2014-12-10 18:26:38 +08:00
#coding=utf-8
2014-11-27 19:43:04 +08:00
module Mobile
module Apis
2014-12-09 16:36:43 +08:00
class Courses < Grape::API
resource :courses do
def self.get_service
CoursesService.new
end
2014-12-10 16:23:56 +08:00
desc "获取所有课程"
2014-12-09 16:36:43 +08:00
params do
2014-12-10 16:23:56 +08:00
optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表'
requires :per_page_count, type: Integer, desc: '每页总数'
requires :page, type: Integer, desc: '当前页码'
optional :token, type: String
2014-12-08 16:51:21 +08:00
end
2014-11-27 19:43:04 +08:00
get do
2016-06-27 11:09:25 +08:00
authenticate!
2014-12-09 16:36:43 +08:00
cs = CoursesService.new
2016-06-27 16:03:07 +08:00
courses = cs.user_courses_list(current_user)
present :data, courses, with: Mobile::Entities::Course,user: current_user
2014-12-09 16:36:43 +08:00
present :status, 0
2014-11-27 19:43:04 +08:00
end
desc "新建课程"
2015-01-04 11:53:16 +08:00
#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]:学时总数
2014-12-13 21:52:26 +08:00
params do
2015-01-04 11:53:16 +08:00
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'
2015-01-05 10:15:14 +08:00
requires :term, type: String, desc: '学期(秋季学期或春季学期)'
2015-01-04 11:53:16 +08:00
requires :time, type: String, desc: '年份'
requires :class_period, type: String, desc: '学时总数'
2014-12-13 21:52:26 +08:00
end
post do
2015-01-04 11:53:16 +08:00
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
2015-01-04 11:53:16 +08:00
present :status, 0
2014-12-13 21:52:26 +08:00
end
desc "编辑课程"
2014-12-13 21:52:26 +08:00
params do
2015-01-04 11:53:16 +08:00
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'
2015-01-05 17:47:04 +08:00
requires :term, type: String, desc: '学期(秋季学期或春季学期)'
2015-01-04 11:53:16 +08:00
requires :time, type: String, desc: '年份'
requires :class_period, type: String, desc: '学时总数'
end
2015-01-05 17:45:47 +08:00
put do
2015-01-04 11:53:16 +08:00
authenticate!
2015-01-05 17:47:04 +08:00
cs = CoursesService.new
2015-01-04 11:53:16 +08:00
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
2015-01-04 11:53:16 +08:00
cs.edit_course_authorize(current_user,course)
2015-01-05 17:47:04 +08:00
course = cs.edit_course(cs_params, course,current_user)
present :data, course, with: Mobile::Entities::Course,user: current_user
2015-01-04 11:53:16 +08:00
present :status, 0
2014-12-13 21:52:26 +08:00
end
post do
end
desc "加入课程"
params do
2016-06-22 16:42:20 +08:00
requires :token, type: String
2016-06-15 13:44:28 +08:00
requires :invite_code, type: String, desc: '邀请码'
2016-08-02 15:50:15 +08:00
requires :teacher_flag, type: Boolean
requires :assistant_flag, type: Boolean
requires :student_flag, type: Boolean
2014-12-13 21:52:26 +08:00
end
2016-08-02 15:50:15 +08:00
post "join_class" do
2014-12-13 21:52:26 +08:00
authenticate!
2016-08-02 15:50:15 +08:00
roles_ids = []
if params[:teacher_flag]
roles_ids << "9"
elsif params[:assistant_flag]
roles_ids << "7"
end
if params[:student_flag]
roles_ids << "10"
end
if roles_ids.length <= 0
{status:-1,message:"请至少选择一个角色"}
else
cs = CoursesService.new
status = cs.join_course_roles({role: roles_ids, openid: params[:openid], invite_code: params[:invite_code]}, current_user)
{
status: status[:state],
message:CoursesService::JoinCourseError.message(status[:state])
}
end
2014-12-13 21:52:26 +08:00
end
2016-06-15 13:44:28 +08:00
2014-12-13 21:52:26 +08:00
desc "退出课程"
params do
2015-01-04 11:53:16 +08:00
requires :token, type: String
2014-12-13 21:52:26 +08:00
end
delete ":id" do
authenticate!
cs = CoursesService.new
2015-01-07 11:37:48 +08:00
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)
2014-12-13 21:52:26 +08:00
end
desc "搜索课程"
params do
requires :name, type: String, desc: "课程名"
optional :token, type: String
2014-12-13 21:52:26 +08:00
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
2014-12-13 21:52:26 +08:00
present :status, 0
end
desc "课程老师列表"
params do
requires :token, type: String
2014-12-13 21:52:26 +08:00
requires :course_id, type: Integer, desc: "课程id"
end
get 'teachers' do
2016-08-05 20:31:51 +08:00
course = Course.find(params[:course_id])
2014-12-13 21:52:26 +08:00
cs = CoursesService.new
teachers = cs.course_teacher_or_student_list({role: '1'}, params[:course_id],current_user)
2016-08-05 20:31:51 +08:00
teachers.each do |m|
if m[:id] == course.tea_id
teachers.delete(m)
teachers.insert(0,m)
break
end
end
present :data, teachers, with: Mobile::Entities::User
present :status, 0
2014-12-13 21:52:26 +08:00
end
desc "课程学生列表"
params do
requires :token, type: String
2014-12-13 21:52:26 +08:00
requires :course_id, type: Integer, desc: "课程id"
end
get 'students' do
2014-12-13 21:52:26 +08:00
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
2014-12-13 21:52:26 +08:00
end
2016-08-02 15:50:15 +08:00
desc "课程未审核列表"
params do
requires :token, type: String
requires :course_id, type: Integer, desc: "课程id"
end
get 'reviewers' do
authenticate!
cs = CoursesService.new
reviewers = cs.reviewers_list(params[:course_id])
present :data, reviewers, with: Mobile::Entities::User
present :status, 0
end
desc "课程单个未审核用户信息"
params do
requires :token, type: String
requires :course_id, type: Integer, desc: "课程id"
requires :user_id, type: Integer, desc: "用户id"
end
post 'review_member_info' do
authenticate!
cs = CoursesService.new
result = cs.get_reviewer_info(params)
present :data, result[:reviewer], with: Mobile::Entities::User
present :status,result[:status]
2016-08-02 15:50:15 +08:00
end
desc "处理教师或助教的身份申请"
params do
requires :token, type: String
requires :course_id, type: Integer, desc: "课程id"
requires :user_id, type: Integer, desc: "用户id"
requires :type, type: Integer, desc: "同意或拒绝"
end
post 'deal_join_apply' do
authenticate!
cs = CoursesService.new
result = cs.deal_join_apply(params,current_user)
present :status, result[:status]
present :message, result[:message]
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
2016-08-02 15:50:15 +08:00
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
2014-12-10 16:23:56 +08:00
desc "返回单个课程"
2014-12-09 16:36:43 +08:00
params do
requires :id, type: Integer
2016-07-15 19:08:05 +08:00
requires :token,type:String
2014-12-09 16:36:43 +08:00
end
route_param :id do
get do
2016-07-15 19:08:05 +08:00
# course = Course.find(params[:id])
cs = CoursesService.new
course = cs.show_course(params,current_user)
2016-07-18 11:08:02 +08:00
if course[:course][:is_delete] == 1
{status:-1, message: '该班级不存在或已被删除啦' }
else
present :data, course, with: Mobile::Entities::Course,user: current_user
present :status, 0
end
2014-12-09 16:36:43 +08:00
end
end
2016-08-23 10:23:46 +08:00
desc "获取课程动态"
params do
requires :id, type: Integer
requires :token, type: String
end
post 'activities' do
authenticate!
user = current_user
2016-08-25 10:55:22 +08:00
course_types = "('Message','News','HomeworkCommon','Poll','Course')"
2016-08-23 10:23:46 +08:00
activities = UserActivity.where("(container_type = 'Course' and container_id = #{params[:id]} and act_type in #{course_types})").order('updated_at desc')
page = params[:page] ? params[:page] : 0
all_count = activities.count
activities = activities.limit(10).offset(page * 10)
count = activities.count
present :data, activities, with: Mobile::Entities::Activity,user: user
present :all_count, all_count
present :count, count
present :page, page
present :status, 0
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,user: current_user
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
2015-01-20 17:42:18 +08:00
desc "显示课程通知"
params do
optional :token, type: String
2015-01-20 17:42:18 +08:00
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
2015-06-19 15:05:25 +08:00
count = cs.all_course_dynamics(params,current_user)
2015-02-06 15:52:34 +08:00
present :data, count, with: Mobile::Entities::CourseDynamic
present :status, 0
end
2015-04-29 17:46:39 +08:00
desc '课程课件'
params do
requires :token, type: String
requires :course_id,type: Integer,desc: '课程id'
2015-05-05 17:19:31 +08:00
optional :name,type:String,desc:'课件名称可能包含的字符'
2015-04-29 17:46:39 +08:00
end
post ":course_id/attachments" do
2015-04-29 17:46:39 +08:00
cs = CoursesService.new
count = cs.course_attachments params
present :data, count, with: Mobile::Entities::Attachment,user: current_user
2015-04-29 17:46:39 +08:00
present :status, 0
end
2015-05-04 17:36:48 +08:00
desc '课程学生'
params do
requires :token,type:String
requires :course_id,type:Integer,desc: '课程id'
optional :name,type:String,desc:'学生的姓名或者登录名或者学号可能包含的字符'
2015-05-04 17:36:48 +08:00
end
get ":course_id/members" do
cs = CoursesService.new
count = cs.course_members params
2015-05-15 14:02:41 +08:00
# 我如果在学生当中,那么我将放在第一位
count.each do |m|
if m.user.id == current_user.id
count.delete m
count.unshift m
end
end
2015-05-04 17:36:48 +08:00
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
2015-05-15 16:13:32 +08:00
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
2015-07-02 17:31:30 +08:00
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
2015-07-17 15:19:28 +08:00
present :data,student_works,with:Mobile::Entities::StudentWork
present :status,0
2015-07-02 17:31:30 +08:00
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
2016-06-27 16:03:07 +08:00
desc '获取测验列表'
params do
requires :token, type:String
end
get ':course_id/exercises' do
authenticate!
2016-07-13 10:09:47 +08:00
course = Course.find(params[:course_id])
exercises = course.exercises.where("exercise_status <> 1").reorder("created_at desc")
present :data,exercises,with:Mobile::Entities::Exercise,user: current_user
2016-06-27 16:03:07 +08:00
present :status,0
end
2015-07-04 15:53:01 +08:00
2016-07-04 17:04:06 +08:00
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
2016-07-04 17:04:06 +08:00
c.delete!
present :status,0
# end
2016-07-04 17:04:06 +08:00
end
2016-07-27 14:30:19 +08:00
desc "获取班级某成员角色信息"
params do
requires :id, type: Integer
requires :token, type: String
requires :user_id, type: Integer
end
post 'get_member_info' do
authenticate!
c = Course.find("#{params[:id]}")
my_member = c.member_principals.where("users.id=#{params[:user_id]}").first
if my_member && my_member.roles[0]
present :course_id,params[:id]
present :user_id,params[:user_id]
present :member_info,my_member, with: Mobile::Entities::ProjectMember
present :status, 0
else
present :status, -1
present :message, "该用户已不在班级中"
2016-07-27 14:30:19 +08:00
end
end
desc "修改班级某成员角色信息"
params do
requires :id, type: Integer
requires :token, type: String
requires :user_id, type: Integer
2016-08-02 15:50:15 +08:00
requires :teacher_flag, type: Boolean
requires :assistant_flag, type: Boolean
requires :student_flag, type: Boolean
2016-07-27 14:30:19 +08:00
end
post 'edit_member_role' do
authenticate!
2016-08-02 15:50:15 +08:00
roles_id = []
if params[:teacher_flag]
roles_id << 9
elsif params[:assistant_flag]
roles_id << 7
end
if params[:student_flag]
roles_id << 10
end
2016-07-27 14:30:19 +08:00
c = Course.find("#{params[:id]}")
#7教辅 9教师 10学生
2016-08-02 15:50:15 +08:00
if c.tea_id == params[:user_id] || c.tea_id != current_user.id || roles_id.length <= 0
2016-07-27 14:30:19 +08:00
present :status, -1
else
cs = CoursesService.new
2016-08-02 15:50:15 +08:00
status = cs.modify_user_course_role params,roles_id
present :status, status
2016-07-27 14:30:19 +08:00
end
end
2016-08-23 16:52:35 +08:00
desc "发布班级通知"
params do
requires :id, type: Integer
requires :token, type: String
requires :text, type: String
requires :title, type: String
end
post ':id/publishnotice' do
authenticate!
#老师或教辅才能发通知
c = Course.find("#{params[:id]}")
my_member = c.member_principals.where("users.id=#{current_user.id}").first
roles_ids = []
my_member.roles.each do |role|
roles_ids << role.id
end
if my_member && (roles_ids.include?(7)|| roles_ids.include?(9) || roles_ids.include?(3))
tmpparams = {}
tmpparams['title'] = params[:title]
tmpparams['description'] = params[:text]
tmpparams['sticky'] = 0
news = News.new(:course => c, :author => current_user)
#render :layout => 'base_courses'
news.safe_attributes = tmpparams
news.save!
present :status, 0
else
present :status, -1
present :message,"学生不能发布通知"
end
end
desc "发布班级问题"
params do
requires :id, type: Integer
requires :token, type: String
requires :text, type: String
end
post ':id/publishissue' do
authenticate!
c = Course.find("#{params[:id]}")
boards = c.boards.includes(:last_message => :author).all
if c.boards.empty?
board = c.boards.build
board.name = "班级问答区"
board.description = c.name.to_s
board.project_id = -1
if board.save
boards = c.boards.includes(:last_message => :author).all
end
end
board = boards.first
message = Message.new
message.author = current_user
message.board = board
tmpparams = {}
tmpparams['subject'] = params[:title]
tmpparams['content'] = params[:text]
message.safe_attributes = tmpparams
message.save!
present :status, 0
end
desc "删除班级成员"
params do
requires :id, type: Integer
requires :token, type: String
requires :user_id, type: Integer
end
post ':id/deletemember' do
authenticate!
status = -1
if(current_user.id != params[:user_id].to_i)
#权限
c = Course.find("#{params[:id]}")
if c.tea_id != params[:user_id].to_i
my_member = c.member_principals.where("users.id=#{current_user.id}").first
roles_ids = []
my_member.roles.each do |role|
roles_ids << role.id
end
if my_member && roles_ids.include?(3)
#删除该成员
cs = CoursesService.new
status = cs.delete_course_member(c,params[:user_id].to_i,current_user)
else
status = -2
end
else
status = -3
end
else
status = -4
end
out = {status: status}
message = case status
when 0; "删除成功"
when -1; "您还未登录"
when -2; "对不起您没有权限"
when -3; "不能删除班级管理员"
when -4; "不能删除自己"
when 1; "该用户不在该班级中"
else; "未知错误,请稍后再试"
end
out.merge(message: message)
end
desc "退出班级"
params do
requires :id, type: Integer
requires :token, type: String
end
post ':id/quit' do
authenticate!
#管理员不能退
cs = CoursesService.new
c = Course.find("#{params[:id]}")
user = current_user
if c.tea_id != user.id
status = cs.exit_course({:object_id => params[:id]}, user)
else
status = 3
end
out = {status: status}
message = case status
when 0; "退出班级成功"
2016-09-01 10:21:29 +08:00
when 1; "您不是该班级成员"
when 2; "您还未登录"
when 3; "管理员不能退出班级"
else; "未知错误,请稍后再试"
end
out.merge(message: message)
end
2014-12-09 16:36:43 +08:00
end
2014-11-27 19:43:04 +08:00
end
end
end