summaryrefslogtreecommitdiff
path: root/app/controllers/related_assets_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/related_assets_controller.rb')
-rw-r--r--app/controllers/related_assets_controller.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/app/controllers/related_assets_controller.rb b/app/controllers/related_assets_controller.rb
new file mode 100644
index 0000000..479ebec
--- /dev/null
+++ b/app/controllers/related_assets_controller.rb
@@ -0,0 +1,49 @@
1class RelatedAssetsController < ApplicationController
2 before_action :login_required
3 before_action :find_node
4
5 def search
6 term = params[:search_term].to_s.strip
7 attached_ids = @node.editable_page.related_assets.pluck(:asset_id)
8 scope = Asset.images.where.not(id: attached_ids)
9
10 results = if term.present?
11 scope.where("name ILIKE ?", "%#{term}%").limit(10)
12 else
13 scope.order(created_at: :desc).limit(5)
14 end
15
16 render json: results.map { |a|
17 { id: a.id, name: a.name, thumb_url: a.upload.url(:thumb) }
18 }
19 end
20
21 def create
22 asset = Asset.find(params[:asset_id])
23 related = @node.editable_page.related_assets.find_or_create_by!(asset: asset)
24
25 render json: {
26 id: related.id,
27 asset_id: asset.id,
28 name: asset.name,
29 thumb_url: asset.upload.url(:thumb),
30 url: node_related_asset_path(@node, related)
31 }
32 end
33
34 def destroy
35 @node.editable_page.related_assets.find(params[:id]).destroy
36 head :ok
37 end
38
39 def update
40 @node.editable_page.related_assets.find(params[:id]).insert_at(params[:position].to_i)
41 head :ok
42 end
43
44 private
45
46 def find_node
47 @node = Node.find(params[:node_id])
48 end
49end