* fix: prevent deletion of scheduled messages that have been sent or failed * fix: update error message for deletion of processed scheduled messages
68 lines
2.0 KiB
Ruby
68 lines
2.0 KiB
Ruby
class Api::V1::Accounts::Conversations::ScheduledMessagesController < Api::V1::Accounts::Conversations::BaseController
|
|
include Events::Types
|
|
|
|
before_action :scheduled_message, only: [:update, :destroy]
|
|
|
|
MAX_LIMIT = 100
|
|
|
|
def index
|
|
authorize build_scheduled_message
|
|
@scheduled_messages = @conversation.scheduled_messages
|
|
.order(scheduled_at: :desc)
|
|
.limit(MAX_LIMIT)
|
|
end
|
|
|
|
def create
|
|
@scheduled_message = build_scheduled_message
|
|
authorize @scheduled_message
|
|
@scheduled_message.assign_attributes(scheduled_message_params)
|
|
@scheduled_message.save!
|
|
dispatch_event(SCHEDULED_MESSAGE_CREATED, scheduled_message: @scheduled_message)
|
|
end
|
|
|
|
def update
|
|
@scheduled_message.assign_attributes(scheduled_message_params)
|
|
@scheduled_message.save!
|
|
dispatch_event(SCHEDULED_MESSAGE_UPDATED, scheduled_message: @scheduled_message)
|
|
end
|
|
|
|
def destroy
|
|
if @scheduled_message.sent? || @scheduled_message.failed?
|
|
return render json: { error: I18n.t('errors.scheduled_messages.cannot_delete_processed') }, status: :unprocessable_entity
|
|
end
|
|
|
|
scheduled_message = @scheduled_message
|
|
scheduled_message.destroy!
|
|
dispatch_event(SCHEDULED_MESSAGE_DELETED, scheduled_message: scheduled_message)
|
|
end
|
|
|
|
private
|
|
|
|
def scheduled_message
|
|
@scheduled_message ||= @conversation.scheduled_messages.find(params[:id])
|
|
authorize @scheduled_message
|
|
end
|
|
|
|
def build_scheduled_message
|
|
@conversation.scheduled_messages.new(account: Current.account, inbox: @conversation.inbox, author: Current.user)
|
|
end
|
|
|
|
def scheduled_message_params
|
|
params.permit(
|
|
:content,
|
|
:scheduled_at,
|
|
:status,
|
|
:attachment,
|
|
template_params: {}
|
|
)
|
|
end
|
|
|
|
def dispatch_event(event_name, data)
|
|
Rails.configuration.dispatcher.dispatch(event_name, Time.zone.now, data)
|
|
end
|
|
end
|
|
|
|
Api::V1::Accounts::Conversations::ScheduledMessagesController.prepend_mod_with(
|
|
'Api::V1::Accounts::Conversations::ScheduledMessagesController'
|
|
)
|