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.
		
		
		
		
		
			
		
			
				
					
					
						
							69 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
	
	
							69 lines
						
					
					
						
							3.8 KiB
						
					
					
				| #coding=utf-8
 | |
| 
 | |
| module Mobile
 | |
|   module Apis
 | |
|     class Activities< Grape::API
 | |
|       resources :activities do
 | |
| 
 | |
|         desc "get user activities"
 | |
| 
 | |
|         params do
 | |
|           requires :page, type: Integer
 | |
|           requires :token, type: String
 | |
|           requires :container_type, type: String
 | |
|         end
 | |
|         post do
 | |
|           begin
 | |
|             authenticate!
 | |
| 
 | |
|             user = current_user
 | |
| 
 | |
|             container_type = params[:container_type] ? params[:container_type] : "All"
 | |
| 
 | |
|             if container_type == "All" || container_type == "Project"
 | |
|               shield_project_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Project'").map(&:shield_id)
 | |
|               user_project_ids = (user.projects.where("status = 1").map{|project| project.id}-shield_project_ids).empty? ? "(-1)" : "(" + (user.projects.where("status = 1").map{|project| project.id}-shield_project_ids).join(",") + ")"
 | |
|               project_types = "('Message','Issue','Project')"
 | |
|             end
 | |
| 
 | |
|             if container_type == "All" || container_type == "Course"
 | |
|               shield_course_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Course'").map(&:shield_id)
 | |
|               user_course_ids = (user.courses.where("is_delete = 0").map{|course| course.id}-shield_course_ids).empty? ? "(-1)" : "(" + (user.courses.where("is_delete = 0").map{|course| course.id}-shield_course_ids).join(",") + ")"
 | |
|               course_types = "('Message','News','HomeworkCommon','Poll','Course')"
 | |
|             end
 | |
| 
 | |
|             page = params[:page] ? params[:page] : 0
 | |
|             principal_types = "JournalsForMessage"
 | |
|             watched_user_ids = User.watched_by(user.id).count == 0 ? " " : ("," + User.watched_by(user.id).map{|u| u.id.to_s }.join(','))
 | |
|             user_ids = "(" + user.id.to_s + watched_user_ids + ")"
 | |
|             watched_user_blog_ids = Blog.select("id").where("author_id in #{user_ids}").count == 0 ? " " :Blog.select("id").where("author_id in #{user_ids}").map { |blog| blog.id}.join(",")
 | |
|             blog_ids = "(" + watched_user_blog_ids + ")"
 | |
| 
 | |
|             if container_type == "Course"
 | |
|               activities = UserActivity.where("(container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types})").order('updated_at desc')
 | |
|             elsif container_type == "Project"
 | |
|               activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})").order('updated_at desc')
 | |
|             else
 | |
|               activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" +
 | |
|                                                         "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+
 | |
|                                                         "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{user.id}) " +
 | |
|                                                         "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})").order('updated_at desc')
 | |
|             end
 | |
|             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
 | |
|             present :container_type, container_type
 | |
|           rescue Exception=>e
 | |
|             present :status, -1
 | |
|             present :message, e.message
 | |
|           end
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end |