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.
educoder/app/services/users/course_service.rb

53 lines
1.1 KiB

class Users::CourseService
include CustomSortable
sort_columns :updated_at, default_by: :updated_at, default_direction: :desc
attr_reader :user, :params
def initialize(user, params)
@user = user
@params = params
end
def call
courses = category_scope_courses.not_deleted
courses = status_filter(courses)
custom_sort(courses, :updated_at, params[:sort_direction])
end
private
def category_scope_courses
case params[:category]
when 'study' then
user.as_student_courses
when 'manage' then
user.manage_courses
else
ids = user.as_student_courses.pluck(:id) + user.manage_courses.pluck(:id)
Course.where(id: ids)
end
end
def status_filter(relations)
# 只有自己查看才有过滤
return relations unless observed_logged_user?
case params[:status]
when 'processing' then
relations.processing
when 'end' then
relations.ended
else
relations
end
end
def observed_logged_user?
User.current.id == user.id
end
end