FIX change praise api

dev_forge
Jasder 5 years ago
parent 479545300c
commit 17547cf120

@ -642,6 +642,13 @@ class ApplicationController < ActionController::Base
render_not_found("未找到’#{params[:id]}’相关的项目") unless @project render_not_found("未找到’#{params[:id]}’相关的项目") unless @project
end 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 private
def object_not_found def object_not_found
uid_logger("Missing template or cant't find record, responding with 404") uid_logger("Missing template or cant't find record, responding with 404")

@ -1,14 +1,17 @@
class PraiseTreadController < ApplicationController class PraiseTreadController < ApplicationController
include MessagesHelper before_action :require_login, except: %i[index]
before_action :require_login, :check_auth before_action :find_project_with_id
before_action :validate_params, only: [:like, :unlike]
before_action :find_object def index
scope = @project.praise_treads.includes(:user)
@praises = paginate(scope)
end
def like def like
begin begin
return normal_status(2, "你已点过赞了") if by_user_liked?(@obj, current_user) return normal_status(2, "你已点过赞了") if current_user.liked?(@project)
@praise_tread = @obj.praise_treads.build(user_id: current_user.id) current_user.like!(@project)
@praise_tread.save! render_ok
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception(e.message) tip_exception(e.message)
@ -18,9 +21,9 @@ class PraiseTreadController < ApplicationController
def unlike def unlike
begin begin
return normal_status(2, "你还没有点过赞噢") unless by_user_liked?(@obj, current_user) return normal_status(2, "你还没有点过赞噢") unless current_user.liked?(@project)
@praise_treads = @obj.praise_treads.user_liker(current_user) current_user.unlike!(@project)
@praise_treads.last.destroy! if @praise_treads.present? render_ok
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)
tip_exception(e.message) tip_exception(e.message)
@ -28,19 +31,4 @@ class PraiseTreadController < ApplicationController
end end
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 end

@ -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

@ -1,11 +1,8 @@
class PraiseTread < ApplicationRecord class PraiseTread < ApplicationRecord
belongs_to :user
belongs_to :praise_tread_object, polymorphic: true, counter_cache: :praises_count belongs_to :praise_tread_object, polymorphic: true, counter_cache: :praises_count
has_many :tidings, :as => :container, :dependent => :destroy 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 after_create :send_tiding
def send_tiding def send_tiding

@ -1,5 +1,6 @@
class User < ApplicationRecord class User < ApplicationRecord
include Watchable include Watchable
include Likeable
include Searchable::Dependents::User include Searchable::Dependents::User
# Account statuses # Account statuses

@ -0,0 +1,3 @@
json.name praise.user.real_name
json.login praise.user.login
json.image_url url_to_avatar(praise.user)

@ -0,0 +1,4 @@
json.total_count @praises.size
json.praises do
json.partial! 'praise', collection: @praises, as: :praise
end

@ -18,10 +18,6 @@ Rails.application.routes.draw do
get 'home/search' get 'home/search'
get 'search', to: 'searchs#index' 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/hidden', to: 'commons#hidden'
put 'commons/unhidden', to: 'commons#unhidden' put 'commons/unhidden', to: 'commons#unhidden'
delete 'commons/delete', to: 'commons#delete' delete 'commons/delete', to: 'commons#delete'
@ -69,7 +65,13 @@ Rails.application.routes.draw do
delete :unfollow delete :unfollow
end end
end end
resources :praise_tread, only: [:index] resources :praise_tread, only: [:index] do
collection do
post :like
delete :unlike
end
end
collection do collection do
post :migrate post :migrate
get :group_type_list get :group_type_list

Loading…
Cancel
Save