43 lines
1.3 KiB
Ruby
43 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
module Api
|
||
module V1
|
||
class MessagesController < Api::V1::BaseController
|
||
before_action do
|
||
require_access_token %w[conversations]
|
||
end
|
||
|
||
rescue_from ActiveRecord::RecordNotFound do
|
||
render_error 404, "Conversation with provided guid could not be found"
|
||
end
|
||
|
||
def create
|
||
conversation = conversation_service.find!(params.require(:conversation_id))
|
||
text = params.require(:body)
|
||
message = current_user.build_message(conversation, text: text)
|
||
message.save!
|
||
Diaspora::Federation::Dispatcher.defer_dispatch(current_user, message)
|
||
render json: message_json(message), status: :created
|
||
rescue ActionController::ParameterMissing
|
||
render_error 422, "Couldn’t accept or process the conversation"
|
||
end
|
||
|
||
def index
|
||
conversation = conversation_service.find!(params.require(:conversation_id))
|
||
messages_page = index_pager(conversation.messages).response
|
||
messages_page[:data] = messages_page[:data].map {|x| message_json(x) }
|
||
render_paged_api_response messages_page
|
||
end
|
||
|
||
private
|
||
|
||
def conversation_service
|
||
ConversationService.new(current_user)
|
||
end
|
||
|
||
def message_json(message)
|
||
MessagePresenter.new(message).as_api_json
|
||
end
|
||
end
|
||
end
|
||
end
|