[graphql] first asynctask work
[gargantext.git] / src / Gargantext / Database / Action / User.hs
index 8fa8d6253647c616ae4bcd6840574d77959d1e3d..23561214fb015c4643ae523689375a0549fdae97 100644 (file)
@@ -23,28 +23,52 @@ import Gargantext.Database.Query.Table.Node.Error
 import Gargantext.Database.Schema.Node
 import Gargantext.Prelude
 
+------------------------------------------------------------------------
+getUserLightWithId :: HasNodeError err => Int -> Cmd err UserLight
+getUserLightWithId i = do
+  candidates <- head <$> getUsersWithId i
+  case candidates of
+    Nothing -> nodeError NoUserFound
+    Just u  -> pure u
+
+getUserLightDB :: HasNodeError err => User -> Cmd err UserLight
+getUserLightDB u = do
+  userId <- getUserId u
+  userLight <- getUserLightWithId userId
+  pure userLight
+
 ------------------------------------------------------------------------
 getUserId :: HasNodeError err
           => User
           -> Cmd err UserId
-getUserId (UserDBId uid) = pure uid
-getUserId (RootId   rid) = do
+getUserId u = do
+  maybeUser <- getUserId' u
+  case maybeUser of
+    Nothing -> nodeError NoUserFound
+    Just u'  -> pure u'
+
+getUserId' :: HasNodeError err
+          => User
+          -> Cmd err (Maybe UserId)
+getUserId' (UserDBId uid) = pure (Just uid)
+getUserId' (RootId   rid) = do
   n <- getNode rid
-  pure $ _node_userId n
-getUserId (UserName u  ) = do
+  pure $ Just $ _node_user_id n
+getUserId' (UserName u  ) = do
   muser <- getUser u
   case muser of
-    Just user -> pure $ userLight_id user
-    Nothing   -> nodeError NoUserFound
-getUserId UserPublic = nodeError NoUserFound
+    Just user -> pure $ Just $ userLight_id user
+    Nothing   -> pure Nothing
+getUserId' UserPublic = pure Nothing
 
 ------------------------------------------------------------------------
 -- | Username = Text
 -- UserName is User
 -- that is confusing, we should change this
+type Username = Text
 getUsername :: HasNodeError err
             => User
-            -> Cmd err Text
+            -> Cmd err Username
 getUsername (UserName u) = pure u
 getUsername (UserDBId i) = do
   users <- getUsersWithId i
@@ -53,7 +77,7 @@ getUsername (UserDBId i) = do
     Nothing -> nodeError $ NodeError "G.D.A.U.getUserName: User not found with that id"
 getUsername (RootId   rid) = do
   n <- getNode rid
-  getUsername (UserDBId $ _node_userId n)
+  getUsername (UserDBId $ _node_user_id n)
 getUsername UserPublic = pure "UserPublic"
 
 --------------------------------------------------------------------------