mirror of
https://github.com/mastodon/mastodon.git
synced 2026-04-29 11:27:38 -05:00
Some checks are pending
Check i18n / check-i18n (push) Waiting to run
Chromatic / Check for relevant changes (push) Waiting to run
Chromatic / Run Chromatic (push) Blocked by required conditions
CodeQL / Analyze (actions) (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
Crowdin / Upload translations / upload-translations (push) Waiting to run
Check formatting / lint (push) Waiting to run
JavaScript Linting / lint (push) Waiting to run
Ruby Linting / lint (push) Waiting to run
JavaScript Testing / test (push) Waiting to run
Historical data migration test / test (14-alpine) (push) Waiting to run
Historical data migration test / test (15-alpine) (push) Waiting to run
Historical data migration test / test (16-alpine) (push) Waiting to run
Historical data migration test / test (17-alpine) (push) Waiting to run
Ruby Testing / build (production) (push) Waiting to run
Ruby Testing / build (test) (push) Waiting to run
Ruby Testing / test (.ruby-version) (push) Blocked by required conditions
Ruby Testing / test (3.2) (push) Blocked by required conditions
Ruby Testing / test (3.3) (push) Blocked by required conditions
Ruby Testing / End to End testing (.ruby-version) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.2) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.3) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
116 lines
3.4 KiB
Ruby
116 lines
3.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Account::Mappings
|
|
extend ActiveSupport::Concern
|
|
|
|
class_methods do
|
|
def following_map(target_account_ids, account_id)
|
|
Follow.where(target_account_id: target_account_ids, account_id: account_id).each_with_object({}) do |follow, mapping|
|
|
mapping[follow.target_account_id] = {
|
|
reblogs: follow.show_reblogs?,
|
|
notify: follow.notify?,
|
|
languages: follow.languages,
|
|
}
|
|
end
|
|
end
|
|
|
|
def followed_by_map(target_account_ids, account_id)
|
|
build_mapping(
|
|
Follow.where(account_id: target_account_ids, target_account_id: account_id),
|
|
:account_id
|
|
)
|
|
end
|
|
|
|
def blocking_map(target_account_ids, account_id)
|
|
build_mapping(
|
|
Block.where(target_account_id: target_account_ids, account_id: account_id),
|
|
:target_account_id
|
|
)
|
|
end
|
|
|
|
def blocked_by_map(target_account_ids, account_id)
|
|
build_mapping(
|
|
Block.where(account_id: target_account_ids, target_account_id: account_id),
|
|
:account_id
|
|
)
|
|
end
|
|
|
|
def muting_map(target_account_ids, account_id)
|
|
Mute.where(target_account_id: target_account_ids, account_id: account_id).each_with_object({}) do |mute, mapping|
|
|
mapping[mute.target_account_id] = {
|
|
notifications: mute.hide_notifications?,
|
|
expires_at: mute.expires_at,
|
|
}
|
|
end
|
|
end
|
|
|
|
def requested_map(target_account_ids, account_id)
|
|
FollowRequest.where(target_account_id: target_account_ids, account_id: account_id).each_with_object({}) do |follow_request, mapping|
|
|
mapping[follow_request.target_account_id] = {
|
|
reblogs: follow_request.show_reblogs?,
|
|
notify: follow_request.notify?,
|
|
languages: follow_request.languages,
|
|
}
|
|
end
|
|
end
|
|
|
|
def requested_by_map(target_account_ids, account_id)
|
|
build_mapping(
|
|
FollowRequest.where(account_id: target_account_ids, target_account_id: account_id),
|
|
:account_id
|
|
)
|
|
end
|
|
|
|
def endorsed_map(target_account_ids, account_id)
|
|
build_mapping(
|
|
AccountPin.where(account_id: account_id, target_account_id: target_account_ids),
|
|
:target_account_id
|
|
)
|
|
end
|
|
|
|
def account_note_map(target_account_ids, account_id)
|
|
AccountNote.where(target_account_id: target_account_ids, account_id: account_id).each_with_object({}) do |note, mapping|
|
|
mapping[note.target_account_id] = {
|
|
comment: note.comment,
|
|
}
|
|
end
|
|
end
|
|
|
|
def domain_blocking_map_by_domain(target_domains, account_id)
|
|
build_mapping(
|
|
AccountDomainBlock.where(account_id: account_id, domain: target_domains),
|
|
:domain
|
|
)
|
|
end
|
|
|
|
private
|
|
|
|
def build_mapping(query, field)
|
|
query
|
|
.pluck(field)
|
|
.index_with(true)
|
|
end
|
|
end
|
|
|
|
def preload_relations!(...)
|
|
@preloaded_relations = relations_map(...)
|
|
end
|
|
|
|
private
|
|
|
|
def relations_map(account_ids, domains = nil, **options)
|
|
relations = {
|
|
blocked_by: Account.blocked_by_map(account_ids, id),
|
|
following: Account.following_map(account_ids, id),
|
|
}
|
|
|
|
return relations if options[:skip_blocking_and_muting]
|
|
|
|
relations.merge!({
|
|
blocking: Account.blocking_map(account_ids, id),
|
|
muting: Account.muting_map(account_ids, id),
|
|
domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, id),
|
|
})
|
|
end
|
|
end
|