2022-11-02 21:41:30 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class ChatChannelSerializer < ApplicationSerializer
|
|
|
|
attributes :id,
|
|
|
|
:auto_join_users,
|
2022-12-06 00:03:51 +08:00
|
|
|
:allow_channel_wide_mentions,
|
2022-11-02 21:41:30 +08:00
|
|
|
:chatable,
|
|
|
|
:chatable_id,
|
|
|
|
:chatable_type,
|
|
|
|
:chatable_url,
|
|
|
|
:description,
|
|
|
|
:title,
|
2022-11-09 08:28:31 +08:00
|
|
|
:slug,
|
2022-11-02 21:41:30 +08:00
|
|
|
:last_message_sent_at,
|
|
|
|
:status,
|
|
|
|
:archive_failed,
|
|
|
|
:archive_completed,
|
|
|
|
:archived_messages,
|
|
|
|
:total_messages,
|
|
|
|
:archive_topic_id,
|
|
|
|
:memberships_count,
|
2022-12-02 08:57:53 +08:00
|
|
|
:current_user_membership,
|
|
|
|
:message_bus_last_ids
|
2022-11-02 21:41:30 +08:00
|
|
|
|
|
|
|
def initialize(object, opts)
|
|
|
|
super(object, opts)
|
|
|
|
@current_user_membership = opts[:membership]
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_description?
|
|
|
|
object.description.present?
|
|
|
|
end
|
|
|
|
|
|
|
|
def memberships_count
|
|
|
|
object.user_count
|
|
|
|
end
|
|
|
|
|
|
|
|
def chatable_url
|
|
|
|
object.chatable_url
|
|
|
|
end
|
|
|
|
|
|
|
|
def title
|
|
|
|
object.name || object.title(scope.user)
|
|
|
|
end
|
|
|
|
|
|
|
|
def chatable
|
|
|
|
case object.chatable_type
|
|
|
|
when "Category"
|
|
|
|
BasicCategorySerializer.new(object.chatable, root: false).as_json
|
2022-11-02 22:53:36 +08:00
|
|
|
when "DirectMessage"
|
|
|
|
DirectMessageSerializer.new(object.chatable, scope: scope, root: false).as_json
|
2022-11-02 21:41:30 +08:00
|
|
|
when "Site"
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def archive
|
|
|
|
object.chat_channel_archive
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_archive_status?
|
|
|
|
scope.is_staff? && object.archived? && archive.present?
|
|
|
|
end
|
|
|
|
|
|
|
|
def archive_completed
|
|
|
|
archive.complete?
|
|
|
|
end
|
|
|
|
|
|
|
|
def archive_failed
|
|
|
|
archive.failed?
|
|
|
|
end
|
|
|
|
|
|
|
|
def archived_messages
|
|
|
|
archive.archived_messages
|
|
|
|
end
|
|
|
|
|
|
|
|
def total_messages
|
|
|
|
archive.total_messages
|
|
|
|
end
|
|
|
|
|
|
|
|
def archive_topic_id
|
|
|
|
archive.destination_topic_id
|
|
|
|
end
|
|
|
|
|
|
|
|
def include_auto_join_users?
|
|
|
|
scope.can_edit_chat_channel?
|
|
|
|
end
|
|
|
|
|
|
|
|
def current_user_membership
|
|
|
|
return if !@current_user_membership
|
|
|
|
@current_user_membership.chat_channel = object
|
|
|
|
UserChatChannelMembershipSerializer.new(
|
|
|
|
@current_user_membership,
|
|
|
|
scope: scope,
|
|
|
|
root: false,
|
|
|
|
).as_json
|
|
|
|
end
|
|
|
|
|
2022-12-02 08:57:53 +08:00
|
|
|
def message_bus_last_ids
|
|
|
|
{
|
|
|
|
new_messages: MessageBus.last_id("/chat/#{object.id}/new-messages"),
|
|
|
|
new_mentions: MessageBus.last_id("/chat/#{object.id}/new-mentions"),
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2022-11-02 21:41:30 +08:00
|
|
|
alias_method :include_archive_topic_id?, :include_archive_status?
|
|
|
|
alias_method :include_total_messages?, :include_archive_status?
|
|
|
|
alias_method :include_archived_messages?, :include_archive_status?
|
|
|
|
alias_method :include_archive_failed?, :include_archive_status?
|
|
|
|
alias_method :include_archive_completed?, :include_archive_status?
|
|
|
|
end
|