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.
		
		
		
		
		
			
		
			
				
					
					
						
							350 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							350 lines
						
					
					
						
							11 KiB
						
					
					
				| #coding=utf-8
 | |
| 
 | |
| module Mobile
 | |
|   module Apis
 | |
|     class Projects < Grape::API
 | |
| 
 | |
|       resources :projects do
 | |
|         desc "获取项目列表"
 | |
|         params do
 | |
|           requires :token, type: String
 | |
|         end
 | |
|         get do
 | |
|           authenticate!
 | |
| 
 | |
|           ps = ProjectsService.new
 | |
|           projects = ps.user_projects(current_user)
 | |
|           present :data, projects, with: Mobile::Entities::Project,user: current_user
 | |
|           present :status, 0
 | |
|         end
 | |
| 
 | |
|         desc "返回单个项目"
 | |
|         params do
 | |
|           requires :id, type: Integer
 | |
|           requires :token,type:String
 | |
|         end
 | |
|         route_param :id do
 | |
|           get do
 | |
|             # course = Course.find(params[:id])
 | |
|             ps = ProjectsService.new
 | |
|             project = ps.show_project(params,current_user)
 | |
| 
 | |
|             if project[:status] == 9
 | |
|               {status:-1, message: '该项目不存在或已被删除啦' }
 | |
|             else
 | |
|               present :data, project, with: Mobile::Entities::Project,user: current_user
 | |
|               present :status, 0
 | |
|             end
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         desc "获取项目动态"
 | |
|         params do
 | |
|           requires :id, type: Integer
 | |
|           requires :token, type: String
 | |
|         end
 | |
|         post 'activities' do
 | |
|           authenticate!
 | |
| 
 | |
|           user = current_user
 | |
| 
 | |
|           project_types = "('Message','Issue','Project')"
 | |
|           activities = UserActivity.where("(container_type = 'Project' and container_id = #{params[:id]} and act_type in #{project_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 :id, type: Integer
 | |
|           requires :token, type: String
 | |
|         end
 | |
|         post 'members' do
 | |
|           authenticate!
 | |
| 
 | |
|           project = Project.find("#{params[:id]}")
 | |
|           members = project.member_principals
 | |
| 
 | |
|           master_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=3").all.sort
 | |
| 
 | |
|           master_members.each do |m|
 | |
|             if m.user_id == project.user_id
 | |
|               master_members.delete(m)
 | |
|               master_members.insert(0,m)
 | |
|               break
 | |
|             end
 | |
|           end
 | |
| 
 | |
|           develop_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=4").all.sort
 | |
|           report_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=5").all.sort
 | |
| 
 | |
|           review_master_members = []
 | |
|           review_develop_members = []
 | |
| 
 | |
|           my_member = project.member_principals.where("users.id=#{current_user.id}").first
 | |
|           if my_member && my_member.roles[0] && my_member.roles[0].id == 3
 | |
|             ps = ProjectsService.new
 | |
| 
 | |
|             user = current_user
 | |
|             review_master_members = ps.get_project_review_members(project,3,user)
 | |
|             review_develop_members = ps.get_project_review_members(project,4,user)
 | |
| 
 | |
|           end
 | |
| 
 | |
|           present :master_members,master_members, with: Mobile::Entities::ProjectMember
 | |
|           present :develop_members,develop_members, with: Mobile::Entities::ProjectMember
 | |
|           present :report_members,report_members, with: Mobile::Entities::ProjectMember
 | |
|           present :review_master_members,review_master_members
 | |
|           present :review_develop_members,review_develop_members
 | |
|           present :status, 0
 | |
|         end
 | |
| 
 | |
|         desc "获取项目某成员角色信息"
 | |
|         params do
 | |
|           requires :id, type: Integer
 | |
|           requires :token, type: String
 | |
|           requires :user_id, type: Integer
 | |
|         end
 | |
|         post 'get_member_info' do
 | |
|           authenticate!
 | |
| 
 | |
|           project = Project.find("#{params[:id]}")
 | |
| 
 | |
|           my_member = project.member_principals.where("users.id=#{params[:user_id]}").first
 | |
| 
 | |
|           if my_member && my_member.roles[0]
 | |
|             present :project_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, "该用户已不在项目中"
 | |
|           end
 | |
| 
 | |
|         end
 | |
| 
 | |
|         desc "修改项目某成员角色信息"
 | |
|         params do
 | |
|           requires :id, type: Integer
 | |
|           requires :token, type: String
 | |
|           requires :user_id, type: Integer
 | |
|           requires :role_id, type: Integer
 | |
|         end
 | |
|         post 'edit_member_role' do
 | |
|           authenticate!
 | |
| 
 | |
|           project = Project.find("#{params[:id]}")
 | |
| 
 | |
|           my_member = project.member_principals.where("users.id=#{current_user.id}").first
 | |
| 
 | |
|           #3管理 4开发 5报告
 | |
|           if !(my_member && my_member.roles[0] && my_member.roles[0].id == 3 ) || project.user_id == params[:user_id] || !(params[:role_id] == 3 || params[:role_id] == 4 || params[:role_id] == 5)
 | |
|             present :status, -1
 | |
|           else
 | |
|             ps = ProjectsService.new
 | |
| 
 | |
|             status = ps.modify_user_project_role params
 | |
| 
 | |
|             present :status, status
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         desc "新建项目"
 | |
|         params do
 | |
|           requires :token, type: String
 | |
|           requires :name, type: String, desc: '项目名称'
 | |
|         end
 | |
|         post 'create' do
 | |
|           authenticate!
 | |
| 
 | |
|           ps = ProjectsService.new
 | |
| 
 | |
|           status = ps.createNewProject params,current_user
 | |
| 
 | |
| 
 | |
|           present :status, 0
 | |
| 
 | |
|         end
 | |
| 
 | |
|         desc "加入项目"
 | |
|         params do
 | |
|           requires :token, type: String
 | |
|           requires :invite_code, type: String, desc: '邀请码'
 | |
|           requires :role_id, type: Integer, desc: '身份'
 | |
|         end
 | |
|         post "join_project" do
 | |
|           authenticate!
 | |
| 
 | |
|           role_id = params[:role_id]
 | |
| 
 | |
|           if role_id != 3 && role_id != 4 && role_id != 5
 | |
|             {status:-1,message:"请至少选择一个角色"}
 | |
|           else
 | |
|             ps = ProjectsService.new
 | |
|             status = ps.join_project({role: role_id, openid: params[:openid], invite_code: params[:invite_code]}, current_user)
 | |
| 
 | |
|             {status:status, message:ProjectsService::JoinProjectError.message(status)}
 | |
|           end
 | |
| 
 | |
|           # {status:-1, message: '该功能将在近日开放,敬请期待!' }
 | |
|         end
 | |
| 
 | |
|         desc "项目单个未审核用户信息"
 | |
|         params do
 | |
|           requires :token, type: String
 | |
|           requires :project_id, type: Integer, desc: "项目id"
 | |
|           requires :user_id, type: Integer, desc: "用户id"
 | |
|         end
 | |
|         post 'review_member_info' do
 | |
|           authenticate!
 | |
| 
 | |
|           ps = ProjectsService.new
 | |
|           result = ps.get_reviewer_info(params,current_user)
 | |
|           present :data, result[:reviewer], with: Mobile::Entities::User
 | |
|           present :status, result[:status]
 | |
|         end
 | |
| 
 | |
|         desc "处理管理或开发的身份申请"
 | |
|         params do
 | |
|           requires :token, type: String
 | |
|           requires :project_id, type: Integer, desc: "项目id"
 | |
|           requires :user_id, type: Integer, desc: "用户id"
 | |
|           requires :type, type: Integer, desc: "同意或拒绝"
 | |
|         end
 | |
|         post 'deal_join_apply' do
 | |
|           authenticate!
 | |
| 
 | |
|           ps = ProjectsService.new
 | |
|           result = ps.deal_join_apply(params,current_user)
 | |
| 
 | |
|           present :status, result[:status]
 | |
|           present :message, result[:message]
 | |
|         end
 | |
| 
 | |
|         desc "发布项目帖子"
 | |
|         params do
 | |
|           requires :id, type: Integer
 | |
|           requires :token, type: String
 | |
|           requires :text, type: String
 | |
|         end
 | |
|         post ':id/publishnote' do
 | |
|           authenticate!
 | |
| 
 | |
|           project = Project.find("#{params[:id]}")
 | |
| 
 | |
|           boards = project.boards.includes(:last_message => :author).all
 | |
|           if project.boards.empty?
 | |
|             board = project.boards.build
 | |
|             board.name = "项目讨论区"
 | |
|             board.description = project.name.to_s
 | |
|             board.course_id = -1
 | |
|             if board.save
 | |
|               boards = project.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)
 | |
|             #权限
 | |
|             project = Project.find("#{params[:id]}")
 | |
|             if project.user_id != params[:user_id].to_i
 | |
| 
 | |
|               my_member = project.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)
 | |
|                 #删除该成员
 | |
|                 ps = ProjectsService.new
 | |
|                 status = ps.project_delete_member(project,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 -1; "您还未登录"
 | |
|                       when -2; "您没有权限"
 | |
|                       when -3; "不能删除项目创建者"
 | |
|                       when -4; "不能删除自己"
 | |
|                       else; "未知错误,请稍后再试"
 | |
|                     end
 | |
|           out.merge(message: message)
 | |
|         end
 | |
| 
 | |
|         desc "退出项目"
 | |
|         params do
 | |
|           requires :id, type: Integer
 | |
|           requires :token, type: String
 | |
|         end
 | |
|         post ':id/quit' do
 | |
|           authenticate!
 | |
| 
 | |
|           project = Project.find("#{params[:id]}")
 | |
| 
 | |
|           ps = ProjectsService.new
 | |
|           status = ps.exit_project(project,current_user)
 | |
| 
 | |
|           out = {status: status}
 | |
|           message = case status
 | |
|                       when 0; "退出项目成功"
 | |
|                       when -3; "您不是该项目成员"
 | |
|                       when -1; "您还未登录"
 | |
|                       when -2; "项目创建者不能退出项目"
 | |
|                       else; "未知错误,请稍后再试"
 | |
|                     end
 | |
|           out.merge(message: message)
 | |
|         end
 | |
| 
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end |