From c53aa1ac3740635a5e6ce7fd36ff240a9787593d Mon Sep 17 00:00:00 2001
From: Przemek Kaminski <pk@intrepidus.pl>
Date: Tue, 27 Dec 2022 06:22:16 +0100
Subject: [PATCH] [flow] some refactoring so that nodes are created in separate
 function

---
 src/Gargantext/Database/Action/Flow.hs | 68 ++++++++++++++++----------
 1 file changed, 43 insertions(+), 25 deletions(-)

diff --git a/src/Gargantext/Database/Action/Flow.hs b/src/Gargantext/Database/Action/Flow.hs
index 58dec7fb..762637b2 100644
--- a/src/Gargantext/Database/Action/Flow.hs
+++ b/src/Gargantext/Database/Action/Flow.hs
@@ -194,7 +194,10 @@ flowDataText :: forall env err m.
                 -> Maybe FlowSocialListWith
                 -> (JobLog -> m ())
                 -> m CorpusId
-flowDataText u (DataOld ids) tt cid mfslw _ = flowCorpusUser (_tt_lang tt) u (Right [cid]) corpusType ids mfslw
+flowDataText u (DataOld ids) tt cid mfslw _ = do
+  (_userId, userCorpusId, listId) <- createNodes u (Right [cid]) corpusType
+  _ <- Doc.add userCorpusId ids
+  flowCorpusUser (_tt_lang tt) u userCorpusId listId corpusType mfslw
   where
     corpusType = (Nothing :: Maybe HyperdataCorpus)
 flowDataText u (DataNew (mLen, txtC)) tt cid mfslw logStatus =
@@ -263,12 +266,18 @@ flow :: forall env err m a c.
         -> (JobLog -> m ())
         -> m CorpusId
 flow c u cn la mfslw (mLength, docsC) logStatus = do
+  (_userId, userCorpusId, listId) <- createNodes u cn c
   -- TODO if public insertMasterDocs else insertUserDocs
-  ids <- runConduit $ zipSources (yieldMany [1..]) docsC
-                   .| CList.chunksOf 100
-                   .| mapMC insertDocs'
-                   .| CList.concat
-                   .| sinkList
+  _ <- runConduit $ zipSources (yieldMany [1..]) docsC
+                 .| CList.chunksOf 100
+                 .| mapMC insertDocs'
+                 .| mapM_C (\ids' -> do
+                               _ <- Doc.add userCorpusId ids'
+                               pure ())
+                 .| sinkList
+
+  _ <- flowCorpusUser (la ^. tt_lang) u userCorpusId listId c mfslw
+
 --  ids <- traverse (\(idx, doc) -> do
 --                      id <- insertMasterDocs c la doc
 --                      logStatus JobLog { _scst_succeeded = Just $ 1 + idx
@@ -278,7 +287,9 @@ flow c u cn la mfslw (mLength, docsC) logStatus = do
 --                                       }
 --                      pure id
 --                  ) (zip [1..] docs)
-  flowCorpusUser (la ^. tt_lang) u cn c ids mfslw
+  --printDebug "[flow] calling flowCorpusUser" (0 :: Int)
+  pure userCorpusId
+  --flowCorpusUser (la ^. tt_lang) u cn c ids mfslw
 
   where
     insertDocs' :: [(Integer, a)] -> m [NodeId]
@@ -300,17 +311,14 @@ flow c u cn la mfslw (mLength, docsC) logStatus = do
 
 
 ------------------------------------------------------------------------
-flowCorpusUser :: ( FlowCmdM env err m
-                  , MkCorpus c
-                  )
-               => Lang
-               -> User
-               -> Either CorpusName [CorpusId]
-               -> Maybe c
-               -> [ContextId]
-               -> Maybe FlowSocialListWith
-               -> m CorpusId
-flowCorpusUser l user corpusName ctype ids mfslw = do
+createNodes :: ( FlowCmdM env err m
+               , MkCorpus c
+               )
+            => User
+            -> Either CorpusName [CorpusId]
+            -> Maybe c
+            -> m (UserId, CorpusId, ListId)
+createNodes user corpusName ctype = do
   -- User Flow
   (userId, _rootId, userCorpusId) <- getOrMk_RootWithCorpus user corpusName ctype
   -- NodeTexts is first
@@ -319,12 +327,25 @@ flowCorpusUser l user corpusName ctype ids mfslw = do
 
   -- NodeList is second
   listId <- getOrMkList userCorpusId userId
-  -- _cooc  <- insertDefaultNode NodeListCooc listId userId
-  -- TODO: check if present already, ignore
-  _ <- Doc.add userCorpusId ids
 
-  -- printDebug "Node Text Ids:" tId
+  -- User Graph Flow
+  _ <- insertDefaultNodeIfNotExists NodeGraph     userCorpusId userId
+  _ <- insertDefaultNodeIfNotExists NodeDashboard userCorpusId userId
+
+  pure (userId, userCorpusId, listId)
 
+
+flowCorpusUser :: ( FlowCmdM env err m
+                  , MkCorpus c
+                  )
+               => Lang
+               -> User
+               -> CorpusId
+               -> ListId
+               -> Maybe c
+               -> Maybe FlowSocialListWith
+               -> m CorpusId
+flowCorpusUser l user userCorpusId listId ctype mfslw = do
   -- User List Flow
   (masterUserId, _masterRootId, masterCorpusId)
     <- getOrMk_RootWithCorpus (UserName userMaster) (Left "") ctype
@@ -346,9 +367,6 @@ flowCorpusUser l user corpusName ctype ids mfslw = do
            pure ()
   -- _ <- insertOccsUpdates userCorpusId mastListId
   -- printDebug "userListId" userListId
-  -- User Graph Flow
-  _ <- insertDefaultNodeIfNotExists NodeGraph     userCorpusId userId
-  _ <- insertDefaultNodeIfNotExists NodeDashboard userCorpusId userId
   --_ <- mkPhylo  userCorpusId userId
   -- Annuaire Flow
   -- _ <- mkAnnuaire  rootUserId userId
-- 
2.21.0