2020-12-03 04:22:51 +00:00
# frozen_string_literal: true
class Api :: V1 :: ChatConversationController < Api :: BaseController
before_action - > { authorize_if_got_token! :read , :'read:chats' }
before_action - > { doorkeeper_authorize! :write , :'write:chats' }
before_action :require_user!
before_action :set_account , only : :create
2020-12-16 00:31:30 +00:00
before_action :set_chat_conversation , only : [ :show , :mark_chat_conversation_approved , :mark_chat_conversation_hidden , :mark_chat_conversation_read ]
2020-12-03 04:22:51 +00:00
def show
render json : { } , each_serializer : REST :: ChatConversationAccountSerializer
end
def create
# : todo :
# check if already created
# check if blocked
# check if chat blocked
# check if allow anyone to message then create with approved:true
# unique account id, participants
chat_conversation_account = find_or_create_conversation
render json : chat_conversation_account , each_serializer : REST :: ChatConversationAccountSerializer
end
2020-12-16 00:31:30 +00:00
def mark_chat_conversation_read
@chat_conversation_account . update! ( unread_count : 0 )
2020-12-03 04:22:51 +00:00
render json : @chat_conversation_account , serializer : REST :: ChatConversationAccountSerializer
end
def mark_chat_conversation_hidden
@chat_conversation_account . update! ( is_hidden : true )
render json : @chat_conversation_account , serializer : REST :: ChatConversationAccountSerializer
end
def mark_chat_conversation_approved
2020-12-16 00:31:30 +00:00
approved_conversation_count = ChatConversationAccount . where ( account : @account , is_hidden : false , is_approved : true ) . count
if approved_conversation_count > = ChatConversationAccount :: PER_ACCOUNT_APPROVED_LIMIT
render json : { error : true , message : " You have #{ approved_conversation_count } active chat conversations. The limit is #{ ChatConversationAccount :: PER_ACCOUNT_APPROVED_LIMIT } . Delete some conversations first before approving any more requests. " }
else
@chat_conversation_account . update! ( is_approved : true )
render json : @chat_conversation_account , serializer : REST :: ChatConversationAccountSerializer
end
2020-12-03 04:22:51 +00:00
end
private
def find_or_create_conversation
chat = ChatConversationAccount . find_by ( account : current_account , participant_account_ids : [ @account . id . to_s ] )
return chat unless chat . nil?
chat_conversation = ChatConversation . create
my_chat = ChatConversationAccount . create! (
account : current_account ,
participant_account_ids : [ @account . id . to_s ] ,
chat_conversation : chat_conversation ,
is_approved : true
)
# : todo : if multiple ids
their_chat = ChatConversationAccount . create! (
account : @account ,
participant_account_ids : [ current_account . id . to_s ] ,
chat_conversation : chat_conversation ,
is_approved : false # default as request
)
return my_chat
end
def set_account
@account = Account . find ( params [ :account_id ] )
end
def set_chat_conversation
@chat_conversation = ChatConversation . find ( params [ :id ] )
@chat_conversation_account = ChatConversationAccount . where (
account : current_account ,
chat_conversation : @chat_conversation
) . first
end
end