55 lines
1.3 KiB
Ruby
55 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class UserPresenter
|
|
attr_accessor :user, :aspects_ids
|
|
|
|
def initialize(user, aspects_ids)
|
|
self.user = user
|
|
self.aspects_ids = aspects_ids
|
|
end
|
|
|
|
def to_json(options={})
|
|
user.person.as_api_response(:backbone).update(
|
|
notifications_count: notifications_count,
|
|
unread_messages_count: unread_messages_count,
|
|
admin: admin,
|
|
moderator: moderator,
|
|
aspects: aspects,
|
|
services: services,
|
|
following_count: user.contacts.receiving.count,
|
|
configured_services: configured_services
|
|
).to_json(options)
|
|
end
|
|
|
|
def services
|
|
ServicePresenter.as_collection(user.services)
|
|
end
|
|
|
|
def configured_services
|
|
user.services.map(&:provider)
|
|
end
|
|
|
|
def aspects
|
|
@aspects ||= begin
|
|
aspects = AspectPresenter.as_collection(user.aspects)
|
|
no_aspects = aspects_ids.empty?
|
|
aspects.each {|a| a[:selected] = no_aspects || aspects_ids.include?(a[:id].to_s) }
|
|
end
|
|
end
|
|
|
|
def notifications_count
|
|
@notification_count ||= user.unread_notifications.count
|
|
end
|
|
|
|
def unread_messages_count
|
|
@unread_message_count ||= user.unread_message_count
|
|
end
|
|
|
|
def admin
|
|
user.admin?
|
|
end
|
|
|
|
def moderator
|
|
user.moderator?
|
|
end
|
|
end
|