diaspora/app/controllers/api/v1/notifications_controller.rb

55 lines
1.8 KiB
Ruby

# frozen_string_literal: true
module Api
module V1
class NotificationsController < Api::V1::BaseController
before_action do
require_access_token %w[notifications]
end
rescue_from ActiveRecord::RecordNotFound do
render_error 404, "Notification with provided guid could not be found"
end
def show
notification = service.get_by_guid(params[:id])
if notification
render json: NotificationPresenter.new(notification).as_api_json
else
render_error 404, "Notification with provided guid could not be found"
end
end
def index
after_date = Date.iso8601(params[:only_after]) if params.has_key?(:only_after)
notifications_query = service.index(params[:only_unread], after_date)
notifications_page = time_pager(notifications_query).response
notifications_page[:data] = notifications_page[:data].map do |note|
NotificationPresenter.new(note, default_serializer_options).as_api_json
end
render_paged_api_response notifications_page
rescue ArgumentError
render_error 422, "Couldnt process the notifications requestt process the notifications request"
end
def update
read = ActiveModel::Type::Boolean.new.cast(params.require(:read))
if service.update_status_by_guid(params[:id], read)
head :no_content
else
render_error 422, "Couldnt process the notifications requestt process the notifications request"
end
rescue ActionController::ParameterMissing
render_error 422, "Couldnt process the notifications requestt process the notifications request"
end
private
def service
@service ||= NotificationService.new(current_user)
end
end
end
end