mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
87 lines
2.7 KiB
Ruby
87 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Api
|
|
module V0
|
|
class EnterprisesController < Api::V0::BaseController
|
|
include GeocodeEnterpriseAddress
|
|
|
|
before_action :override_owner, only: [:create, :update]
|
|
before_action :check_type, only: :update
|
|
before_action :override_sells, only: [:create, :update]
|
|
before_action :override_visible, only: [:create, :update]
|
|
respond_to :json
|
|
|
|
def create
|
|
authorize! :create, Enterprise
|
|
|
|
# params[:user_ids] breaks the enterprise creation
|
|
# We remove them from params and save them after creating the enterprise
|
|
user_ids = enterprise_params.delete(:user_ids)
|
|
@enterprise = Enterprise.new(enterprise_params)
|
|
if @enterprise.save
|
|
geocode_address_if_use_geocoder
|
|
@enterprise.user_ids = user_ids
|
|
render json: @enterprise.id, status: :created
|
|
else
|
|
invalid_resource!(@enterprise)
|
|
end
|
|
end
|
|
|
|
def update
|
|
@enterprise = Enterprise.find_by(permalink: params[:id]) || Enterprise.find(params[:id])
|
|
authorize! :update, @enterprise
|
|
|
|
if @enterprise.update(enterprise_params)
|
|
geocode_address_if_use_geocoder
|
|
render json: @enterprise.id, status: :ok
|
|
else
|
|
invalid_resource!(@enterprise)
|
|
end
|
|
end
|
|
|
|
def update_image
|
|
@enterprise = Enterprise.find_by(permalink: params[:id]) || Enterprise.find(params[:id])
|
|
authorize! :update, @enterprise
|
|
|
|
if params[:logo] && @enterprise.update( logo: params[:logo] )
|
|
render(html: @enterprise.logo_url(:medium), status: :ok)
|
|
elsif params[:promo] && @enterprise.update!( promo_image: params[:promo] )
|
|
render(html: @enterprise.promo_image_url(:medium), status: :ok)
|
|
else
|
|
invalid_resource!(@enterprise)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def override_owner
|
|
enterprise_params[:owner_id] = current_api_user.id
|
|
end
|
|
|
|
def check_type
|
|
enterprise_params.delete :type unless current_api_user.admin?
|
|
end
|
|
|
|
def override_sells
|
|
has_hub = current_api_user.owned_enterprises.is_hub.any?
|
|
new_enterprise_is_producer = !!enterprise_params[:is_primary_producer]
|
|
|
|
enterprise_params[:sells] = if has_hub && !new_enterprise_is_producer
|
|
'any'
|
|
else
|
|
'unspecified'
|
|
end
|
|
end
|
|
|
|
def override_visible
|
|
enterprise_params[:visible] = "only_through_links"
|
|
end
|
|
|
|
def enterprise_params
|
|
@enterprise_params ||= PermittedAttributes::Enterprise.new(params).call.
|
|
to_h.with_indifferent_access
|
|
end
|
|
end
|
|
end
|
|
end
|