Newer
Older
class V1::CollectionsController < ApplicationController
Mauricio Giacomini Girardello
committed
include ::SociableController
include ::FollowableController
include ::TaggableController
include ::DeletedObjectsController
include ::HighlightsController
before_action :set_collection, only: [:show, :update, :destroy, :add_object, :set_collection_items]
before_action :authenticate_user!, only: [:create, :update, :destroy]
Mauricio Giacomini Girardello
committed
# GET /v1/collections
# GET /v1/collections.json
Mauricio Giacomini Girardello
committed
# GET /v1/collections/1
# GET /v1/collections/1.json
Mauricio Giacomini Girardello
committed
render json: @collection
Mauricio Giacomini Girardello
committed
# POST /v1/collection
# POST /v1/collection.json
Mauricio Giacomini Girardello
committed
collection = Collection.new(collection_params)
Mauricio Giacomini Girardello
committed
if collection.save
render json: collection, status: :created
Mauricio Giacomini Girardello
committed
render json: collection.errors, status: :unprocessable_entity
end
end
# PUT/PATCH /v1/users/1
# PUT/PATCH /v1/users/1.json
def update
Mauricio Giacomini Girardello
committed
if @collection.update(collection_params)
render json: @collection, status: :ok
Mauricio Giacomini Girardello
committed
render json: @collection.errors, status: :unprocessable_entity
Mauricio Giacomini Girardello
committed
# DELETE /v1/collections/1
# DELETE /v1/collections/1.json
Mauricio Giacomini Girardello
committed
@collection.destroy
# POST /v1/collections/!/items
Lucas Ernesto Kindinger
committed
def add_object
render nothing: true, status: :unprocessable_entity if params.nil?
render json: @collection, status: :ok
Lucas Ernesto Kindinger
committed
end
def deleted_resource; Collection; end
def highlights_resource; Collection; end
Mauricio Giacomini Girardello
committed
# social concerns methods
def followable; set_collection; end
def taggable; set_collection; end
def sociable; set_collection; end
def set_collection
@collection ||= Collection.find(params[:id])
def set_collection_items
items = collection_params[:items]
collection_items = items.map{ |item| CollectionItem.new(collection: @collection,
collectionable: item[:type].constantize.find(item[:id]),
order: item[:order])}
CollectionItem.import collection_items, on_duplicate_key_update: {conflict_target: [:collection_id, :collectionable_id, :collectionable_type]}
end
# Never trust parameters from the scary internet, only allow the white list through.
def collection_params
params.require(:collection).permit(:name, :description, :owner_id, :owner_type, :privacy, tags: [], items: [:type, :id])
Lucas Ernesto Kindinger
committed