Class: Decidim::Proposals::CreateProposalType

Inherits:
Api::Types::BaseMutation
  • Object
show all
Defined in:
lib/decidim/api/mutations/create_proposal_type.rb

Instance Method Summary collapse

Instance Method Details

#authorized?(attributes:, locale:, toggle_translations:) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
46
47
48
49
# File 'lib/decidim/api/mutations/create_proposal_type.rb', line 43

def authorized?(attributes:, locale:, toggle_translations:)
  unless super && allowed_to?(:create, :proposal, Decidim::Proposals::Proposal.new(component: current_component), { current_user:, current_component: })
    raise Decidim::Api::Errors::MutationNotAuthorizedError, I18n.t("decidim.api.errors.unauthorized_mutation")
  end

  true
end

#resolve(attributes:, locale:, toggle_translations:) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/decidim/api/mutations/create_proposal_type.rb', line 15

def resolve(attributes:, locale:, toggle_translations:)
  set_locale(locale:, toggle_translations:)

  params = attributes.to_h.slice(:title, :body, :address, :latitude, :longitude, :taxonomies)

  params[:taxonomies] = Decidim::Taxonomy.where(organization: current_organization, id: params[:taxonomies]).pluck(:id) if params[:taxonomies]

  form = form(Decidim::Proposals::ProposalForm).from_params(params)

  Decidim::Proposals::CreateProposal.call(form, current_user) do
    on(:ok) do |proposal|
      Decidim::Proposals::PublishProposal.call(proposal, current_user) do
        on(:ok) do
          return proposal.reload
        end

        on(:invalid) do
          raise Decidim::Api::Errors::ValidationError, I18n.t("proposals.publish.error", scope: "decidim")
        end
      end
    end

    on(:invalid) do
      raise Decidim::Api::Errors::AttributeValidationError, form.errors
    end
  end
end