54 lines
1.8 KiB
Ruby
54 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Api
|
|
module V1
|
|
class NotificationsController < Api::V1::BaseController
|
|
before_action except: %i[update] do
|
|
require_access_token %w[read]
|
|
end
|
|
|
|
before_action only: %i[update] do
|
|
require_access_token %w[write]
|
|
end
|
|
|
|
rescue_from ActiveRecord::RecordNotFound do
|
|
render json: I18n.t("api.endpoint_errors.notifications.not_found"), status: :not_found
|
|
end
|
|
|
|
def show
|
|
notification = service.get_by_guid(params[:id])
|
|
|
|
if notification
|
|
render json: NotificationPresenter.new(notification).as_api_json(true)
|
|
else
|
|
render json: I18n.t("api.endpoint_errors.notifications.not_found"), status: :not_found
|
|
end
|
|
end
|
|
|
|
def index
|
|
after_date = Date.iso8601(params[:only_after]) if params.has_key?(:only_after)
|
|
notifications = service.index(params[:only_unread], after_date)
|
|
render json: notifications.map {|note| NotificationPresenter.new(note, default_serializer_options).as_api_json }
|
|
rescue ArgumentError
|
|
render json: I18n.t("api.endpoint_errors.notifications.cant_process"), status: :unprocessable_entity
|
|
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 json: I18n.t("api.endpoint_errors.notifications.cant_process"), status: :unprocessable_entity
|
|
end
|
|
rescue ActionController::ParameterMissing
|
|
render json: I18n.t("api.endpoint_errors.notifications.cant_process"), status: :unprocessable_entity
|
|
end
|
|
|
|
private
|
|
|
|
def service
|
|
@service ||= NotificationService.new(current_user)
|
|
end
|
|
end
|
|
end
|
|
end
|