diff --git a/app/controllers/repp/v1/registrar/notifications_controller.rb b/app/controllers/repp/v1/registrar/notifications_controller.rb index 4e00a93217..1185a1a737 100644 --- a/app/controllers/repp/v1/registrar/notifications_controller.rb +++ b/app/controllers/repp/v1/registrar/notifications_controller.rb @@ -18,6 +18,24 @@ def index render_success(data: data) end + api :GET, '/repp/v1/registrar/notifications/all_notifications' + desc 'Get the all unread poll messages' + def all_notifications + records = current_user.unread_notifications.order('created_at DESC').all + + @notification = records.limit(limit).offset(offset) + # rubocop:disable Style/AndOr + render_success(data: nil) and return unless @notification + # rubocop:enable Style/AndOr + + data = @notification.as_json(only: %i[id text attached_obj_id attached_obj_type]) + + message = 'Command completed successfully.'\ + " Returning #{@notification.count} out of #{records.count}."\ + ' Use URL parameters :limit and :offset to list other messages if needed.' + render_success(data: data, message: message) + end + api :GET, '/repp/v1/registrar/notifications/:notification_id' desc 'Get a specific poll message' def show @@ -45,6 +63,18 @@ def update def set_notification @notification = current_user.unread_notifications.find(params[:id]) end + + def limit + index_params[:limit] || 200 + end + + def offset + index_params[:offset] || 0 + end + + def index_params + params.permit(:limit, :offset) + end end end end diff --git a/config/routes.rb b/config/routes.rb index be4c3cd7e9..43cced0a0c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -55,7 +55,11 @@ resources :auctions, only: %i[index] resources :retained_domains, only: %i[index] namespace :registrar do - resources :notifications, only: [:index, :show, :update] + resources :notifications, only: [:index, :show, :update] do + collection do + get '/all_notifications', to: 'notifications#all_notifications' + end + end resources :nameservers do collection do put '/', to: 'nameservers#update' diff --git a/test/integration/repp/v1/registrar/notifications_test.rb b/test/integration/repp/v1/registrar/notifications_test.rb index 9fafca4436..2677d393b5 100644 --- a/test/integration/repp/v1/registrar/notifications_test.rb +++ b/test/integration/repp/v1/registrar/notifications_test.rb @@ -9,6 +9,17 @@ def setup @auth_headers = { 'Authorization' => token } end + def test_all_unreaded_poll_messages + notification = @user.registrar.notifications.where(read: false).order(created_at: :desc).all + get "/repp/v1/registrar/notifications/all_notifications", headers: @auth_headers + json = JSON.parse(response.body, symbolize_names: true) + + assert_response :ok + assert_equal notification.count, json[:data].count + assert_equal json[:data].first[:text], notification.first.text + assert_equal json[:data].last[:text], notification.last.text + end + def test_gets_latest_unread_poll_message notification = @user.registrar.notifications.where(read: false).order(created_at: :desc).first get "/repp/v1/registrar/notifications", headers: @auth_headers