55 lines
1.7 KiB
Ruby
55 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class CreateChatConversationService < BaseService
|
|
|
|
def call(current_account, other_accounts)
|
|
@current_account = current_account
|
|
@other_accounts = other_accounts
|
|
|
|
return nil if @other_accounts.nil? || @current_account.nil?
|
|
|
|
# check if already created
|
|
chat = ChatConversationAccount.find_by(account: current_account, participant_account_ids: account_ids_as_array)
|
|
|
|
return chat unless chat.nil?
|
|
|
|
# : todo :
|
|
# check if allow anyone to message then create with approved:true
|
|
|
|
@chat_conversation = ChatConversation.create
|
|
|
|
my_chat = ChatConversationAccount.create!(
|
|
account: @current_account,
|
|
participant_account_ids: account_ids_as_array,
|
|
chat_conversation: @chat_conversation,
|
|
is_approved: true
|
|
)
|
|
|
|
if @other_accounts.length == 1 && @other_accounts[0].id == @current_account.id
|
|
# dont create two conversations if you are chatting with yourself
|
|
else
|
|
for other_account in @other_accounts
|
|
this_conversation_participants = @other_accounts.map { |account|
|
|
account.id.to_s
|
|
}.reject { |id| id == other_account.id.to_s } << @current_account.id.to_s
|
|
|
|
# is_approved = other_account&.user&.setting_chat_messages_restrict_non_followers == true
|
|
|
|
ChatConversationAccount.create!(
|
|
account: other_account,
|
|
participant_account_ids: this_conversation_participants,
|
|
chat_conversation: @chat_conversation,
|
|
is_approved: false
|
|
)
|
|
end
|
|
end
|
|
|
|
my_chat
|
|
end
|
|
|
|
def account_ids_as_array
|
|
@other_accounts.map { |account| account.id.to_s }
|
|
end
|
|
|
|
end
|