From 95efd9c0cfbbca5a40df723c771f3cfaccbbf73d Mon Sep 17 00:00:00 2001
From: Mauricio Giacomini Girardello <mauriciogiacomini4@gmail.com>
Date: Tue, 20 Oct 2015 09:59:34 -0200
Subject: [PATCH] adding save method for collection repository

---
 app/controllers/learning_objects_controller.rb     | 11 +++++++++--
 .../orient_db/collection_repository.rb             | 14 +++++++++++---
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb
index 2217721f1..af0edaa22 100644
--- a/app/controllers/learning_objects_controller.rb
+++ b/app/controllers/learning_objects_controller.rb
@@ -1,7 +1,7 @@
 class LearningObjectsController < ApplicationController
   include Reportable
 
-  before_action :set_learning_object, only: [:show, :edit, :update, :destroy, :like]
+  before_action :set_learning_object, only: [:show, :edit, :update, :destroy, :like, :bookmark]
   after_action :increment_learning_object_views, only: [:show]
   before_action :authenticate_user!, except: [:index, :show, :like]
 
@@ -86,7 +86,14 @@ class LearningObjectsController < ApplicationController
     learning_object_repository.report current_user, @learning_object, message, description
   end
 
-  def bookmark
+  def bookmarks
+    bookmarks = current_user.bookmarks
+    bookmarks.add @learning_object
+    collection_repository.save bookmarks
+
+    if request.xhr?
+      render json: {id: params[:id]}
+    end
   end
 
   private
diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb
index 63b51407f..6a725450a 100644
--- a/app/repositories/orient_db/collection_repository.rb
+++ b/app/repositories/orient_db/collection_repository.rb
@@ -6,6 +6,13 @@ module OrientDb
       Collection.new(map_object_hash(args))
     end
 
+    def save(collection = Collection.new)
+      collection.learning_objects.each do |learning_object|
+        query = sprintf("update %s add learning_objects = %s", collection.id, learning_object.id)
+        connection.command query
+      end
+    end
+
     def create_bookmarks_collection(user)
       bookmarks = Bookmarks.new(owner: user)
       create bookmarks
@@ -30,12 +37,13 @@ module OrientDb
     end
 
     def all(user)
-      objects = build_objects get_edges_end('BelongsTo', 'in', user.rid)
+      query = sprintf("select * from (select expand(in('BelongsTo')) from %s) where name<>'Bookmarks'", user.rid)
+      objects = build_objects connection.query(query)
     end
 
     def bookmarks(user)
-      # TODO: change bookmarks query
-      result = all user
+      query = sprintf("select * from (select expand(in('BelongsTo')) from %s) where name='Bookmarks'", user.rid)
+      result = build_objects(connection.query(query))
       if !result.empty?
         return result.first
       end
-- 
GitLab