mirror of
https://github.com/discourse/discourse.git
synced 2026-08-08 17:53:55 +08:00
- improve the contract a little - use `model` where possible - extract message existence logic to a dedicated policy, allowing easier testing. - remove unused code - refactor specs to follow current guidelines/best practices
41 lines
974 B
Ruby
Vendored
41 lines
974 B
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
module Chat
|
|
class MessagesSerializer < ::ApplicationSerializer
|
|
attributes :messages, :tracking, :meta
|
|
|
|
delegate :metadata, to: :object, private: true
|
|
|
|
def initialize(object, opts)
|
|
super(object, opts)
|
|
@opts = opts
|
|
end
|
|
|
|
def messages
|
|
object.messages.map do |message|
|
|
::Chat::MessageSerializer.new(
|
|
message,
|
|
scope: scope,
|
|
root: false,
|
|
include_thread_preview: true,
|
|
include_thread_original_message: true,
|
|
thread_participants: object.thread_participants,
|
|
thread_memberships: object.thread_memberships,
|
|
**@opts,
|
|
)
|
|
end
|
|
end
|
|
|
|
def tracking
|
|
object.tracking || {}
|
|
end
|
|
|
|
def meta
|
|
{
|
|
target_message_id: metadata[:target_message]&.id,
|
|
can_load_more_future: metadata[:can_load_more_future],
|
|
can_load_more_past: metadata[:can_load_more_past],
|
|
}
|
|
end
|
|
end
|
|
end
|