From 786be2e7c180cf782d197fb03fedd1fd69029da9 Mon Sep 17 00:00:00 2001
From: Mauricio Giacomini Girardello <mauriciogiacomini4@gmail.com>
Date: Mon, 19 Oct 2015 11:50:15 -0200
Subject: [PATCH] raise an exception when p_id of orientdb user class will be
 duplicated

---
 app/models/duplicated_user_index_error.rb     |  2 ++
 app/repositories/orient_db/user_repository.rb | 12 +++++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)
 create mode 100644 app/models/duplicated_user_index_error.rb

diff --git a/app/models/duplicated_user_index_error.rb b/app/models/duplicated_user_index_error.rb
new file mode 100644
index 000000000..1356e37c3
--- /dev/null
+++ b/app/models/duplicated_user_index_error.rb
@@ -0,0 +1,2 @@
+class DuplicatedUserIndexError < Orientdb4r::ServerError
+end
\ No newline at end of file
diff --git a/app/repositories/orient_db/user_repository.rb b/app/repositories/orient_db/user_repository.rb
index d7f3a8787..cb6a97b4b 100644
--- a/app/repositories/orient_db/user_repository.rb
+++ b/app/repositories/orient_db/user_repository.rb
@@ -2,9 +2,15 @@ module OrientDb
   class UserRepository < Base
 
     def create_graph_node(user)
-      if user.persisted?
-        connection.command sprintf("create vertex User set p_id = %d", user.id)
-        return true
+      begin
+        if user.persisted?
+          connection.command sprintf("create vertex User set p_id = %d", user.id)
+          return true
+        end
+      rescue Orientdb4r::ServerError => e
+        if e.message =~ /ORecordDuplicatedException/
+          raise DuplicatedUserIndexError, 'The OrientDB index p_id of User class cannot be duplicated.'
+        end
       end
 
       raise NotPersistedRecordError, 'The user wasn`t persisted yet.'
-- 
GitLab