Class: V0::MessagesController

Inherits:
SMController show all
Includes:
Filterable
Defined in:
app/controllers/v0/messages_controller.rb

Constant Summary

Constants inherited from ApplicationController

ApplicationController::VERSION_STATUS

Constants included from SignIn::Authentication

SignIn::Authentication::BEARER_PATTERN

Constants included from ExceptionHandling

ExceptionHandling::SKIP_SENTRY_EXCEPTION_TYPES

Instance Attribute Summary

Attributes inherited from ApplicationController

#current_user

Instance Method Summary collapse

Methods included from Filterable

#filter_params, #filter_query, #valid_filters?, #validate_filter_params!

Methods inherited from SMController

#authorize, #client, #raise_access_denied, #use_cache?

Methods included from JsonApiPaginationLinks

#base_path, #build_page_url, #next_link, #pagination_links, #prev_link

Methods included from MHVControllerConcerns

#authenticate_client

Methods inherited from ApplicationController

#clear_saved_form, #cors_preflight, #pagination_params, #render_job_id, #routing_error, #set_csrf_header

Methods included from Traceable

#set_trace_tags

Methods included from SentryControllerLogging

#set_tags_and_extra_context, #tags_context, #user_context

Methods included from SentryLogging

#log_exception_to_sentry, #log_message_to_sentry, #non_nil_hash?, #normalize_level, #rails_logger, #set_sentry_metadata

Methods included from Instrumentation

#append_info_to_payload

Methods included from SignIn::Authentication

#access_token, #access_token_authenticate, #authenticate, #authenticate_access_token, #bearer_token, #cookie_access_token, #handle_authenticate_error, #load_user, #load_user_object, #scrub_bearer_token, #validate_request_ip

Methods included from Headers

#set_app_info_headers

Methods included from ExceptionHandling

#render_errors, #report_mapped_exception, #report_original_exception, #skip_sentry_exception?, #skip_sentry_exception_types

Methods included from AuthenticationAndSSOConcerns

#authenticate, #clear_session, #extend_session!, #load_user, #log_sso_info, #render_unauthorized, #reset_session, #set_api_cookie!, #set_current_user, #set_session_expiration_header, #set_session_object, #sign_in_service_exp_time, #sign_in_service_session, #sso_cookie_content, #sso_logging_info, #validate_inbound_login_params, #validate_session

Methods included from SignIn::AudienceValidator

#authenticate, #validate_audience!

Instance Method Details

#categoriesObject



80
81
82
# File 'app/controllers/v0/messages_controller.rb', line 80

def categories
  render json: CategorySerializer.new(client.get_categories)
end

#createObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'app/controllers/v0/messages_controller.rb', line 32

def create
  message = Message.new(message_params.merge(upload_params))
  raise Common::Exceptions::ValidationErrors, message unless message.valid?

  message_params[:id] = message_params.delete(:draft_id) if message_params[:draft_id].present?
  create_message_params = { message: message_params }.merge(upload_params)

  client_response = if message.uploads.present?
                      client.post_create_message_with_attachment(create_message_params)
                    else
                      client.post_create_message(message_params)
                    end
  options = { meta: {} }
  options[:include] = [:attachments] if client_response.attachment
  render json: MessageSerializer.new(client_response, options)
end

#destroyObject



49
50
51
52
# File 'app/controllers/v0/messages_controller.rb', line 49

def destroy
  client.delete_message(params[:id])
  head :no_content
end

#indexObject



7
8
9
10
11
12
13
14
15
16
17
18
# File 'app/controllers/v0/messages_controller.rb', line 7

def index
  resource = client.get_folder_messages(@current_user.uuid, params[:folder_id].to_s, use_cache?)
  raise Common::Exceptions::RecordNotFound, params[:folder_id] if resource.blank?

  resource = params[:filter].present? ? resource.find_by(filter_params) : resource
  resource = resource.sort(params[:sort])
  resource = resource.paginate(**pagination_params)

  links = pagination_links(resource)
  options = { meta: resource., links: }
  render json: MessagesSerializer.new(resource.data, options)
end

#message_paramsObject (private)



92
93
94
# File 'app/controllers/v0/messages_controller.rb', line 92

def message_params
  @message_params ||= params.require(:message).permit(:draft_id, :category, :body, :recipient_id, :subject)
end

#moveObject



84
85
86
87
88
# File 'app/controllers/v0/messages_controller.rb', line 84

def move
  folder_id = params.require(:folder_id)
  client.post_move_message(params[:id], folder_id)
  head :no_content
end

#replyObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'app/controllers/v0/messages_controller.rb', line 63

def reply
  message = Message.new(message_params.merge(upload_params)).as_reply
  raise Common::Exceptions::ValidationErrors, message unless message.valid?

  message_params[:id] = message_params.delete(:draft_id) if message_params[:draft_id].present?
  create_message_params = { message: message_params }.merge(upload_params)

  client_response = if message.uploads.present?
                      client.post_create_message_reply_with_attachment(params[:id], create_message_params)
                    else
                      client.post_create_message_reply(params[:id], message_params)
                    end
  options = { meta: {} }
  options[:include] = [:attachments] if client_response.attachment
  render json: MessageSerializer.new(client_response, options), status: :created
end

#showObject



20
21
22
23
24
25
26
27
28
29
30
# File 'app/controllers/v0/messages_controller.rb', line 20

def show
  message_id = params[:id].try(:to_i)
  response = client.get_message(message_id)

  raise Common::Exceptions::RecordNotFound, message_id if response.blank?

  options = {
    meta: response.
  }
  render json: MessageSerializer.new(response, options)
end

#threadObject



54
55
56
57
58
59
60
61
# File 'app/controllers/v0/messages_controller.rb', line 54

def thread
  message_id = params[:id].try(:to_i)
  resource = client.get_message_history(message_id)
  raise Common::Exceptions::RecordNotFound, message_id if resource.blank?

  options = { meta: resource. }
  render json: MessagesSerializer.new(resource.data, options)
end

#upload_paramsObject (private)



96
97
98
# File 'app/controllers/v0/messages_controller.rb', line 96

def upload_params
  @upload_params ||= { uploads: params[:uploads] }
end