forked from Gitlink/forgeplus
62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
class WatchersController < ApplicationController
|
|
before_action :require_login, except: %i[index]
|
|
before_action :require_profile_completed, only: [:follow]
|
|
# before_action :find_project_with_id
|
|
before_action :get_target
|
|
|
|
def index
|
|
scope = @target.watchers.includes(:user)
|
|
@watchers = paginate(scope)
|
|
end
|
|
|
|
def unfollow
|
|
begin
|
|
return normal_status(2, "你还没有关注哦") unless current_user.watched?(@target)
|
|
current_user.unwatch!(@target)
|
|
render_ok({watchers_count: @target.watchers_count, watched: false})
|
|
rescue Exception => e
|
|
uid_logger_error(e.message)
|
|
tip_exception(e.message)
|
|
raise ActiveRecord::Rollback
|
|
end
|
|
end
|
|
|
|
def follow
|
|
begin
|
|
return normal_status(2, "你已关注了") if current_user.watched?(@target)
|
|
current_user.watch!(@target)
|
|
render_ok({watchers_count: @target.watchers_count, watched: true})
|
|
rescue Exception => e
|
|
uid_logger_error(e.message)
|
|
tip_exception(e.message)
|
|
raise ActiveRecord::Rollback
|
|
end
|
|
end
|
|
|
|
def check_watch
|
|
is_watch = current_user.watched?(@target)
|
|
render_result(is_watch ? 1 : 0)
|
|
rescue Exception => e
|
|
uid_logger_error(e.message)
|
|
tip_exception(e.message)
|
|
end
|
|
|
|
private
|
|
|
|
def get_target
|
|
target_type = params[:target_type].to_s
|
|
case target_type
|
|
when "project"
|
|
@target = target_type.capitalize.constantize.find_by(id: params[:id])
|
|
else
|
|
@target = target_type.capitalize.constantize.find_by(login: params[:id]) #用户
|
|
end
|
|
|
|
unless @target.present?
|
|
normal_status(-1, "目标不存在")
|
|
end
|
|
|
|
end
|
|
|
|
end
|