diff --git a/app/channels/chat_channel.rb b/app/channels/chat_channel.rb index 8cccad1..06357bb 100644 --- a/app/channels/chat_channel.rb +++ b/app/channels/chat_channel.rb @@ -13,7 +13,15 @@ def chat(data) user_id: current_user.id, content: data['text'] ) - ActionCable.server.broadcast("chat_channel_#{message.room.workspace.id}", message) + + message_data = message.attributes.symbolize_keys + + reactions = Reaction.where(message_id: message_data["id"]).order(name: :desc) + message_data.store(:reactions, reactions) + user = User.select(:id, :name, :email, :image).find(message_data["user_id"]) + message_data.store(:user, user) + message_data.delete(:user_id) + ActionCable.server.broadcast("chat_channel_#{message.room.workspace.id}", message_data) end def chat_delete(data) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index f75e43d..4dbe5d3 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -4,7 +4,7 @@ class MessagesController < ApplicationController def index params = index_params - messages = Room.find(params[:room_id]).messages.order("created_at DESC").page(params[:page]).per(20) + messages = Room.find(params[:room_id]).messages.order("created_at DESC").page(params[:page]).per(20).preload(:reactions, :user) if messages.blank? render status: 200, json: messages return @@ -13,9 +13,9 @@ def index each_message = messages.map { |p| p.attributes.symbolize_keys } messages.each_with_index do |message, i| - reactions = Reaction.where(message_id: message["id"]).order(name: :desc) + reactions = message.reactions.order(name: :desc) each_message[i].store(:reactions, reactions) - user = User.select(:id, :name, :email, :image).find(message["user_id"]) + user = message.user.slice(:id, :name, :email, :image) each_message[i].store(:user, user) each_message[i].delete(:user_id) end diff --git a/spec/requests/messages_spec.rb b/spec/requests/messages_spec.rb index ab74869..7a7fa53 100644 --- a/spec/requests/messages_spec.rb +++ b/spec/requests/messages_spec.rb @@ -29,6 +29,7 @@ expect(response).to have_http_status :ok res = JSON.parse(response.body) expect(res['messages'].length).to eq(20) + print(res) # expect(res['messages']).to match_array(lower_camel_key_hash(messages.map { |message| MessageSerializer.new(message).as_json })) end end