6fbea0a59e
removing .mov for now until we can figure out solution with videojs, added model to track username changes, got chat creation flow down, progress on bookmark collections, albums, filtering blocks/mutes from group, explore, collection timelines
94 lines
3.5 KiB
Ruby
94 lines
3.5 KiB
Ruby
# 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
|
|
before_action :set_chat_conversation, only: [
|
|
:show,
|
|
:mark_chat_conversation_approved,
|
|
:mark_chat_conversation_hidden,
|
|
:mark_chat_conversation_read,
|
|
:set_expiration_policy
|
|
]
|
|
|
|
def show
|
|
render json: {}, each_serializer: REST::ChatConversationAccountSerializer
|
|
end
|
|
|
|
def create
|
|
chat_conversation_account = find_or_create_conversation
|
|
render json: chat_conversation_account, serializer: REST::ChatConversationAccountSerializer
|
|
end
|
|
|
|
def mark_chat_conversation_read
|
|
@chat_conversation_account.update!(unread_count: 0)
|
|
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
|
|
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
|
|
end
|
|
|
|
def set_expiration_policy
|
|
if current_user.account.is_pro
|
|
case params[:expiration]
|
|
when 'five_minutes'
|
|
@expires_at = ChatConversationAccount::EXPIRATION_POLICY_MAP[:five_minutes]
|
|
when 'one_hour'
|
|
@expires_at = ChatConversationAccount::EXPIRATION_POLICY_MAP[:one_hour]
|
|
when 'six_hours'
|
|
@expires_at = ChatConversationAccount::EXPIRATION_POLICY_MAP[:six_hours]
|
|
when 'one_day'
|
|
@expires_at = ChatConversationAccount::EXPIRATION_POLICY_MAP[:one_day]
|
|
when 'three_days'
|
|
@expires_at = ChatConversationAccount::EXPIRATION_POLICY_MAP[:three_days]
|
|
when 'one_week'
|
|
@expires_at = ChatConversationAccount::EXPIRATION_POLICY_MAP[:one_week]
|
|
else
|
|
@expires_at = nil
|
|
end
|
|
@chat_conversation_account.chat_message_expiration_policy = @expires_at
|
|
@chat_conversation_account.save!
|
|
render json: @chat_conversation_account, serializer: REST::ChatConversationAccountSerializer
|
|
else
|
|
render json: { error: 'You need to be a GabPRO member to access this' }, status: 422
|
|
end
|
|
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?
|
|
my_chat = CreateChatConversationService.new.call(current_account, [@account])
|
|
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
|