docbrown/app/controllers/api/v0/classified_listings_controller.rb
rhymes 1df24046d8
Small API controllers refactoring (#6021) [deploy]
* TagsController inherits from ApiController
* Let ApiController inherit from ActionController::Base to have its own lifecycle
* Remove unused method
* Use only one respond_to :json for the entire API
* ApiController inherits from ActionController::Base
* Use Pundit only where needed
2020-02-12 11:51:42 -05:00

86 lines
2.4 KiB
Ruby

module Api
module V0
class ClassifiedListingsController < ApiController
include Pundit
include ClassifiedListingsToolkit
before_action :set_classified_listing, only: %i[update]
before_action :authenticate_with_api_key_or_current_user!, only: %i[create update]
skip_before_action :verify_authenticity_token, only: %i[create update]
def index
@classified_listings = ClassifiedListing.published.
select(ATTRIBUTES_FOR_SERIALIZATION).
includes(:user, :organization, :taggings)
@classified_listings = @classified_listings.where(category: params[:category]) if params[:category].present?
@classified_listings = @classified_listings.order(bumped_at: :desc)
per_page = (params[:per_page] || 30).to_i
num = [per_page, 100].min
page = params[:page] || 1
@classified_listings = @classified_listings.page(page).per(num)
set_surrogate_key_header "classified-listings-#{params[:category]}-#{page}-#{num}"
end
def show
@classified_listing = ClassifiedListing.
select(ATTRIBUTES_FOR_SERIALIZATION).
includes(:user, :organization).
find(params[:id])
end
def create
super
end
def update
super
end
ATTRIBUTES_FOR_SERIALIZATION = %i[
id user_id organization_id title slug body_markdown
cached_tag_list category processed_html published
].freeze
private_constant :ATTRIBUTES_FOR_SERIALIZATION
private
attr_accessor :user
alias current_user user
def process_no_credit_left
msg = "Not enough available credits"
render json: { error: msg, status: 402 }, status: :payment_required
end
def process_successful_draft
render "show", status: :created
end
def process_unsuccessful_draft
render json: { errors: @classified_listing.errors }, status: :unprocessable_entity
end
def process_successful_creation
render "show", status: :created
end
def process_unsuccessful_creation
render json: { errors: @classified_listing.errors }, status: :unprocessable_entity
end
def process_after_update
render "show", status: :ok
end
def process_after_unpublish
render "show", status: :ok
end
end
end
end