From 17547cf120faa8b5054d7751c502e90310be1d8f Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 9 Jan 2020 10:03:15 +0800 Subject: [PATCH] FIX change praise api --- app/controllers/application_controller.rb | 7 ++++ app/controllers/praise_tread_controller.rb | 38 +++++++------------- app/models/concerns/likeable.rb | 21 +++++++++++ app/models/praise_tread.rb | 5 +-- app/models/user.rb | 1 + app/views/praise_tread/_praise.json.jbuilder | 3 ++ app/views/praise_tread/index.json.jbuilder | 4 +++ config/routes.rb | 12 ++++--- 8 files changed, 57 insertions(+), 34 deletions(-) create mode 100644 app/models/concerns/likeable.rb create mode 100644 app/views/praise_tread/_praise.json.jbuilder create mode 100644 app/views/praise_tread/index.json.jbuilder diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 9461e180f..3c2b5afa7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -642,6 +642,13 @@ class ApplicationController < ActionController::Base render_not_found("未找到’#{params[:id]}’相关的项目") unless @project end + def find_project_with_id + @project = Project.find params[:project_id] + rescue Exception => e + logger_error(e.message) + tip_exception(e.message) + end + private def object_not_found uid_logger("Missing template or cant't find record, responding with 404") diff --git a/app/controllers/praise_tread_controller.rb b/app/controllers/praise_tread_controller.rb index fa6931c0e..851cc33aa 100644 --- a/app/controllers/praise_tread_controller.rb +++ b/app/controllers/praise_tread_controller.rb @@ -1,14 +1,17 @@ class PraiseTreadController < ApplicationController - include MessagesHelper - before_action :require_login, :check_auth - before_action :validate_params, only: [:like, :unlike] - before_action :find_object + before_action :require_login, except: %i[index] + before_action :find_project_with_id + + def index + scope = @project.praise_treads.includes(:user) + @praises = paginate(scope) + end def like begin - return normal_status(2, "你已点过赞了") if by_user_liked?(@obj, current_user) - @praise_tread = @obj.praise_treads.build(user_id: current_user.id) - @praise_tread.save! + return normal_status(2, "你已点过赞了") if current_user.liked?(@project) + current_user.like!(@project) + render_ok rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) @@ -18,9 +21,9 @@ class PraiseTreadController < ApplicationController def unlike begin - return normal_status(2, "你还没有点过赞噢") unless by_user_liked?(@obj, current_user) - @praise_treads = @obj.praise_treads.user_liker(current_user) - @praise_treads.last.destroy! if @praise_treads.present? + return normal_status(2, "你还没有点过赞噢") unless current_user.liked?(@project) + current_user.unlike!(@project) + render_ok rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) @@ -28,19 +31,4 @@ class PraiseTreadController < ApplicationController end end - private - def find_object - begin - object_type = params[:object_type] || 'project' - @obj = object_type.strip.classify.constantize.find_by_identifier params[:id] - rescue Exception => e - uid_logger_error(e.message) - tip_exception(e.message) - return - end - end - - def validate_params - return normal_status(2, "缺少参数:object_id") if params[:object_id].blank? - end end diff --git a/app/models/concerns/likeable.rb b/app/models/concerns/likeable.rb new file mode 100644 index 000000000..3add62ab4 --- /dev/null +++ b/app/models/concerns/likeable.rb @@ -0,0 +1,21 @@ +module Likeable + extend ActiveSupport::Concern + + included do + has_many :praise_treads, as: :praise_tread_object, dependent: :destroy + end + + def liked?(praiseable) + praiseable.praise_treads.exists?(user_id: self.id) + end + + def like!(praiseable) + praiseable.praise_treads.create!(user_id: self.id) + end + + def unlike!(praiseable) + obj = praiseable.praise_treads.find_by(user_id: self.id) + obj.destroy! if obj.present? + end + +end diff --git a/app/models/praise_tread.rb b/app/models/praise_tread.rb index 8420a29cd..362bb88b4 100644 --- a/app/models/praise_tread.rb +++ b/app/models/praise_tread.rb @@ -1,11 +1,8 @@ class PraiseTread < ApplicationRecord + belongs_to :user belongs_to :praise_tread_object, polymorphic: true, counter_cache: :praises_count has_many :tidings, :as => :container, :dependent => :destroy - scope :liker, lambda { where(:praise_or_tread => 1) } - scope :user_liker, ->(user_id) { where(user_id: user_id, praise_or_tread: 1) } - scope :by_praise_tread_object_id_and_type, -> (object_id, object_type) { where(praise_tread_object_id: object_id, praise_tread_object_type: object_type)} - after_create :send_tiding def send_tiding diff --git a/app/models/user.rb b/app/models/user.rb index 45c20e6e7..39fc7ae79 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,6 @@ class User < ApplicationRecord include Watchable + include Likeable include Searchable::Dependents::User # Account statuses diff --git a/app/views/praise_tread/_praise.json.jbuilder b/app/views/praise_tread/_praise.json.jbuilder new file mode 100644 index 000000000..55a0dac7e --- /dev/null +++ b/app/views/praise_tread/_praise.json.jbuilder @@ -0,0 +1,3 @@ +json.name praise.user.real_name +json.login praise.user.login +json.image_url url_to_avatar(praise.user) diff --git a/app/views/praise_tread/index.json.jbuilder b/app/views/praise_tread/index.json.jbuilder new file mode 100644 index 000000000..39703c343 --- /dev/null +++ b/app/views/praise_tread/index.json.jbuilder @@ -0,0 +1,4 @@ +json.total_count @praises.size +json.praises do + json.partial! 'praise', collection: @praises, as: :praise +end diff --git a/config/routes.rb b/config/routes.rb index 098ebaf2c..803b81ec5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -18,10 +18,6 @@ Rails.application.routes.draw do get 'home/search' get 'search', to: 'searchs#index' - - post 'praise_tread/like', to: 'praise_tread#like' - delete 'praise_tread/unlike', to: 'praise_tread#unlike' - put 'commons/hidden', to: 'commons#hidden' put 'commons/unhidden', to: 'commons#unhidden' delete 'commons/delete', to: 'commons#delete' @@ -69,7 +65,13 @@ Rails.application.routes.draw do delete :unfollow end end - resources :praise_tread, only: [:index] + resources :praise_tread, only: [:index] do + collection do + post :like + delete :unlike + end + end + collection do post :migrate get :group_type_list