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