class Users::PrivateMessagesController < Users::BaseController before_action :private_user_resources! after_action :update_onclick_time!, only: [:index] def index @count = observed_user.private_messages.without_deleted.group(:target_id).count.count subquery = observed_user.private_messages.without_deleted.order(send_time: :desc).to_sql query = "SELECT subquery.*, COUNT(*) message_count FROM (#{subquery}) subquery "\ "GROUP BY subquery.target_id ORDER BY subquery.send_time desc LIMIT #{limit_value} OFFSET #{offset_value}" @messages = PrivateMessage.select('*').from("(#{query}) AS query").includes(target: :user_extension) end def create receiver = User.find_by(id: params[:target_id]) return render_error('用户未找到') if receiver.blank? @message = PrivateMessages::CreateService.call(observed_user, receiver, create_params) rescue PrivateMessages::CreateService::Error => ex render_error(ex.message) end def destroy message = observed_user.private_messages.without_deleted.find(params[:id]) message.destroy! render_ok end private def update_onclick_time! current_user.onclick_time.touch(:onclick_time) end def create_params params.permit(:content) end end