Improved /api/v1/accounts/:id/statuses with new params: only_media, exclude_replies
Redirect /:username to /users/:username Redirect /:username/:id to /users/:username/updates/:id Updated API documentation and sponsors
This commit is contained in:
parent
07b166af64
commit
5f4e402204
5 changed files with 40 additions and 22 deletions
|
@ -47,6 +47,8 @@ class Api::V1::AccountsController < ApiController
|
|||
|
||||
def statuses
|
||||
@statuses = @account.statuses.permitted_for(@account, current_account).paginate_by_max_id(limit_param(DEFAULT_STATUSES_LIMIT), params[:max_id], params[:since_id])
|
||||
@statuses = @statuses.where(id: MediaAttachment.where(account: @account).where.not(status_id: nil).reorder('').select('distinct status_id')) if params[:only_media]
|
||||
@statuses = @statuses.without_replies if params[:exclude_replies]
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
|
||||
set_maps(@statuses)
|
||||
|
@ -58,21 +60,6 @@ class Api::V1::AccountsController < ApiController
|
|||
set_pagination_headers(next_path, prev_path)
|
||||
end
|
||||
|
||||
def media_statuses
|
||||
media_ids = MediaAttachment.where(account: @account).where.not(status_id: nil).reorder('').select('distinct status_id')
|
||||
@statuses = @account.statuses.where(id: media_ids).permitted_for(@account, current_account).paginate_by_max_id(limit_param(DEFAULT_STATUSES_LIMIT), params[:max_id], params[:since_id])
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
|
||||
set_maps(@statuses)
|
||||
set_counters_maps(@statuses)
|
||||
|
||||
next_path = media_statuses_api_v1_account_url(max_id: @statuses.last.id) unless @statuses.empty?
|
||||
prev_path = media_statuses_api_v1_account_url(since_id: @statuses.first.id) unless @statuses.empty?
|
||||
|
||||
set_pagination_headers(next_path, prev_path)
|
||||
render action: :statuses
|
||||
end
|
||||
|
||||
def follow
|
||||
FollowService.new.call(current_user.account, @account.acct)
|
||||
set_relationship
|
||||
|
|
|
@ -37,6 +37,9 @@ class Status < ApplicationRecord
|
|||
scope :remote, -> { where.not(uri: nil) }
|
||||
scope :local, -> { where(uri: nil) }
|
||||
|
||||
scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') }
|
||||
scope :without_reblogs, -> { where('statuses.reblog_of_id IS NULL') }
|
||||
|
||||
cache_associated :account, :application, :media_attachments, :tags, :stream_entry, mentions: :account, reblog: [:account, :application, :stream_entry, :tags, :media_attachments, mentions: :account], thread: :account
|
||||
|
||||
def reply?
|
||||
|
@ -109,8 +112,8 @@ class Status < ApplicationRecord
|
|||
def as_public_timeline(account = nil, local_only = false)
|
||||
query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id')
|
||||
.where(visibility: :public)
|
||||
.where('(statuses.reply = false OR statuses.in_reply_to_account_id = statuses.account_id)')
|
||||
.where('statuses.reblog_of_id IS NULL')
|
||||
.without_replies
|
||||
.without_reblogs
|
||||
|
||||
query = query.where('accounts.domain IS NULL') if local_only
|
||||
|
||||
|
@ -121,7 +124,7 @@ class Status < ApplicationRecord
|
|||
query = tag.statuses
|
||||
.joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id')
|
||||
.where(visibility: :public)
|
||||
.where('statuses.reblog_of_id IS NULL')
|
||||
.without_reblogs
|
||||
|
||||
query = query.where('accounts.domain IS NULL') if local_only
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue