[FIX] Patch Scores: Nothing Nothing case
[gargantext.git] / src / Gargantext / API / Node / Update.hs
index 1fc6cdbc98afc513680482d30d0ba3dc7499f8fc..1d5f5aabc5043826cbcc518a8facce7c7ef30e8e 100644 (file)
@@ -17,34 +17,35 @@ module Gargantext.API.Node.Update
       where
 
 import Data.Aeson
+import Data.Maybe (Maybe(..))
 import Data.Swagger
 import GHC.Generics (Generic)
-import Data.Maybe (Maybe(..))
-import Gargantext.API.Admin.Settings (HasSettings)
-import Gargantext.API.Admin.Orchestrator.Types (JobLog(..))
-import Gargantext.API.Node.Corpus.New (AsyncJobs)
-import Gargantext.API.Prelude (GargServer, simuLogs)
-import Gargantext.Viz.Graph.Distances (GraphMetric(..), Distance(..))
-import Gargantext.Viz.Graph.API (recomputeGraph)
-import Gargantext.Database.Action.Flow.Types (FlowCmdM)
-import Gargantext.Database.Admin.Types.Node
-import Gargantext.Prelude (Ord, Eq, (<$>), ($), liftBase, (.), printDebug, pure)
 import Prelude (Enum, Bounded, minBound, maxBound)
 import Servant
 import Servant.Job.Async (JobFunction(..), serveJobsAPI)
 import Test.QuickCheck (elements)
 import Test.QuickCheck.Arbitrary
 
+import Gargantext.API.Admin.Orchestrator.Types (JobLog(..), AsyncJobs)
+import Gargantext.API.Admin.Types (HasSettings)
+import Gargantext.API.Prelude (GargServer, simuLogs)
+import Gargantext.Core.Viz.Graph.API (recomputeGraph)
+import Gargantext.Core.Methods.Distances (GraphMetric(..), Distance(..))
+import Gargantext.Database.Action.Flow.Pairing (pairing)
+import Gargantext.Database.Action.Flow.Types (FlowCmdM)
+import Gargantext.Database.Admin.Types.Node
+import Gargantext.Prelude (Ord, Eq, (<$>), ($), liftBase, (.), printDebug, pure, show, cs, (<>), panic)
 
 ------------------------------------------------------------------------
 type API = Summary " Update node according to NodeType params"
          :> AsyncJobs JobLog '[JSON] UpdateNodeParams JobLog
 
 ------------------------------------------------------------------------
-data UpdateNodeParams = UpdateNodeParamsList  { methodList  :: Method      }
-                      | UpdateNodeParamsGraph { methodGraph :: GraphMetric }
-                      | UpdateNodeParamsTexts { methodTexts :: Granularity }
-                      | UpdateNodeParamsBoard { methodBoard :: Charts      }
+data UpdateNodeParams = UpdateNodeParamsList  { methodList  :: !Method      }
+                      | UpdateNodeParamsGraph { methodGraph :: !GraphMetric }
+                      | UpdateNodeParamsTexts { methodTexts :: !Granularity }
+                      | UpdateNodeParamsBoard { methodBoard :: !Charts      }
+                      | LinkNodeReq { nodeType :: !NodeType, id :: !NodeId }
     deriving (Generic)
 
 ----------------------------------------------------------------------
@@ -63,11 +64,11 @@ data Charts = Sources | Authors | Institutes | Ngrams | All
 api :: UserId -> NodeId -> GargServer API
 api uId nId =
   serveJobsAPI $
-    JobFunction (\p log ->
+    JobFunction (\p log'' ->
       let
         log' x = do
           printDebug "updateNode" x
-          liftBase $ log x
+          liftBase $ log'' x
       in updateNode uId nId p (liftBase . log')
       )
 
@@ -81,7 +82,7 @@ updateNode uId nId (UpdateNodeParamsGraph metric) logStatus = do
 
   logStatus JobLog { _scst_succeeded = Just 1
                    , _scst_failed    = Just 0
-                   , _scst_remaining = Just 2
+                   , _scst_remaining = Just 1
                    , _scst_events    = Just []
                    }
 
@@ -95,6 +96,24 @@ updateNode uId nId (UpdateNodeParamsGraph metric) logStatus = do
                , _scst_events    = Just []
                }
 
+updateNode _uId nid1 (LinkNodeReq nt nid2) logStatus = do
+  logStatus JobLog { _scst_succeeded = Just 1
+                   , _scst_failed    = Just 0
+                   , _scst_remaining = Just 1
+                   , _scst_events    = Just []
+                   }
+  _ <- case nt of
+    NodeAnnuaire -> pairing nid2 nid1 Nothing -- defaultList
+    NodeCorpus   -> pairing nid1 nid2 Nothing -- defaultList
+    _            -> panic $ "[G.API.N.Update.updateNode] NodeType not implemented"
+                           <> cs (show nt)
+
+  pure  JobLog { _scst_succeeded = Just 2
+               , _scst_failed    = Just 0
+               , _scst_remaining = Just 0
+               , _scst_events    = Just []
+               }
+
 
 updateNode _uId _nId _p logStatus = do
   simuLogs logStatus 10