Class: Api::NotificationsController

Inherits:
ApplicationController
  • Object
show all
Includes:
NotificationsConcern
Defined in:
app/controllers/api/notifications_controller.rb

Instance Method Summary collapse

Instance Method Details

#archive_selectedObject

Archive selected notifications

:category: Notifications Actions

Parameters

  • :id - An array of IDs of notifications you’d like to archive. If ID is ‘all’, all notifications will be archived

Example

POST api/notifications/archive_selected.json?id=all

HEAD 204


216
217
218
219
# File 'app/controllers/api/notifications_controller.rb', line 216

def archive_selected
  Notification.archive(selected_notifications, params[:value])
  head :ok
end

#delete_selectedObject

Delete selected notifications

:category: Notifications Actions

Parameters

  • :id - An array of IDs of notifications you’d like to delete. If ID is ‘all’, all notifications will be deleted

Example

POST api/notifications/delete_selected.json?id=all

HEAD 204


252
253
254
255
# File 'app/controllers/api/notifications_controller.rb', line 252

def delete_selected
  selected_notifications.delete_all
  head :ok
end

#indexObject

Return a listing of notifications, including a summary of unread repos, notification reasons, and notification types

:category: Notifications CRUD

Parameters

  • :page - The page you would like to request

  • :per_page - The number of results you would like to return per page. Max 100, default 20.

  • :starred - Return only the user’s starred notifications

  • :archive - Return only the user’s archived notifications

  • :q - Search by subject title of the notification

Notes

If the :per_page paremeter is set to more than 100, a 404 will be returned

Example

GET api/notifications.json

{
   "pagination" : {
      "total_notifications" : 1,
      "page" : 1,
      "total_pages" : 1,
      "per_page" : 20
   },
   "types" : {
      "PullRequest" : 1,
   },
   "reasons" : {
      "mention" : 1
   },
   "unread_repositories" : {
      "octobox/octobox" : 1
   },
   "notifications" : [
      {
         "id" : 29,
         "github_id" :  320,
         "reason" :  "mention",
         "unread" :  true,
         "archived" :  false,
         "starred" :  false,
         "url" : "https://api.github.com/notifications/threads/320",
         "web_url" : "https://github.com/octobox/octobox/pull/320",
         "last_read_at" : "2017-02-20 22:26:11 UTC",
         "created_at" : "2017-02-22T15:49:33.750Z",
         "updated_at" : "2017-02-22T15:40:21.000Z",
         "subject":{
            "title" : "Add JSON API",
            "url" : "https://api.github.com/repos/octobox/octobox/pulls/320",
            "type" : "PullRequest",
            "state" : "merged"
         },
         "repo":{
            "id": 320,
            "name" : "octobox/octobox",
            "owner" : "octobox",
            "repo_url" : "https://github.com/octobox/octobox"
         }
      }
   ]
}


71
72
73
# File 'app/controllers/api/notifications_controller.rb', line 71

def index
  load_notifications
end

#lookupObject

Find a notification by it’s subject url

Parameters

  • :url - github url of subject

Example

GET api/notifications/lookup.json {

"id" : 29,
"github_id" :  320,
"reason" :  "mention",
"unread" :  true,
"archived" :  false,
"starred" :  false,
"url" : "https://api.github.com/notifications/threads/320",
"web_url" : "https://github.com/octobox/octobox/pull/320",
"last_read_at" : "2017-02-20 22:26:11 UTC",
"created_at" : "2017-02-22T15:49:33.750Z",
"updated_at" : "2017-02-22T15:40:21.000Z",
"subject":{
   "title" : "Add JSON API",
   "url" : "https://api.github.com/repos/octobox/octobox/pulls/320",
   "type" : "PullRequest",
   "state" : "merged"
},
"repo":{
   "id": 320,
   "name" : "octobox/octobox",
   "owner" : "octobox",
   "repo_url" : "https://github.com/octobox/octobox"
}

}



175
176
177
178
179
180
181
182
183
# File 'app/controllers/api/notifications_controller.rb', line 175

def lookup
  if params[:url].present?
    url = Octobox::SubjectUrlParser.new(params[:url]).to_api_url
    @notification = current_user.notifications.where(subject_url: url).first
    render json: {} if @notification.nil?
  else
    render json: {}
  end
end

#mark_read_selectedObject

Mark selected notifications as read

:category: Notifications Actions

Parameters

  • :id - An array of IDs of notifications you’d like to mark as read. If ID is ‘all’, all notifications will be marked as read

Example

POST api/notifications/mark_read_selected.json?id=all

HEAD 204


234
235
236
237
# File 'app/controllers/api/notifications_controller.rb', line 234

def mark_read_selected
  Notification.mark_read(selected_notifications)
  head :ok
end

#mute_selectedObject

Mute selected notifications, this will also archive them

:category: Notifications Actions

Parameters

  • :id - An array of IDs of notifications you’d like to mute. If ID is ‘all’, all notifications will be muted

Example

POST api/notifications/mute_selected.json?id=all

HEAD 204


198
199
200
201
# File 'app/controllers/api/notifications_controller.rb', line 198

def mute_selected
  Notification.mute(selected_notifications)
  head :ok
end

#starObject

Star a notification

:category: Notifications Actions

Example

POST api/notifications/:id/star.json

HEAD 204


84
85
86
87
88
# File 'app/controllers/api/notifications_controller.rb', line 84

def star
  find_notification
  @notification.update_columns starred: !@notification.starred?
  head :ok
end

#syncObject

Synchronize notifications with GitHub

:category: Notifications Actions

Example

POST api/notifications/sync.json

HEAD 204


117
118
119
120
121
122
123
124
125
# File 'app/controllers/api/notifications_controller.rb', line 117

def sync
  if Octobox.background_jobs_enabled?
    current_user.sync_notifications
  else
    current_user.sync_notifications_in_foreground
  end

  render json: {}
end

#syncingObject

Check if user is synchronizing notifications with GitHub

Example

POST api/notifications/syncing.json

{} 204 (ok)

POST api/notifications/syncing.json

{} 423 (locked)


100
101
102
103
104
105
106
# File 'app/controllers/api/notifications_controller.rb', line 100

def syncing
  if current_user.syncing?
    render json: {}, status: :locked
  else
    render json: { error: Sidekiq::Status::get(current_user.sync_job_id, :exception) }, status: :ok
  end
end

#unread_countObject

Return a count for the number of unread notifications

:category: Notifications CRUD

Example

GET api/notifications/unread_count.json

{ "count" : 1 }


136
137
138
# File 'app/controllers/api/notifications_controller.rb', line 136

def unread_count
  render json: { 'count' => user_unread_count }
end