[FIX] Order 1 and Order 2, node size ok.
[gargantext.git] / src / Gargantext / API / Node / Update.hs
index c482d543fc594ef1395bb67f2cedabe2bc24733d..de9259f4a0a9537cdb947b6c08062f57524ef8ff 100644 (file)
@@ -16,25 +16,34 @@ Portability : POSIX
 module Gargantext.API.Node.Update
       where
 
+import Control.Lens (view)
 import Data.Aeson
 import Data.Maybe (Maybe(..))
 import Data.Swagger
 import GHC.Generics (Generic)
-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 qualified Gargantext.API.Metrics as Metrics
+import Gargantext.API.Ngrams.List (reIndexWith)
+import qualified Gargantext.API.Ngrams.Types as NgramsTypes
 import Gargantext.API.Prelude (GargServer, simuLogs)
+import Gargantext.Core.Methods.Distances (GraphMetric(..))
+import Gargantext.Core.Types.Main (ListType(..))
 import Gargantext.Core.Viz.Graph.API (recomputeGraph)
-import Gargantext.Core.Viz.Graph.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.Database.Query.Table.Node (getNode)
+import Gargantext.Database.Schema.Node (node_parent_id)
+import Gargantext.Database.Schema.Ngrams (NgramsType(NgramsTerms))
 import Gargantext.Prelude (Ord, Eq, (<$>), ($), liftBase, (.), printDebug, pure, show, cs, (<>), panic)
+import qualified Gargantext.Utils.Aeson as GUA
+import Prelude (Enum, Bounded, minBound, maxBound)
+import Servant
+import Servant.Job.Async (JobFunction(..), serveJobsAPI)
+import Test.QuickCheck (elements)
+import Test.QuickCheck.Arbitrary
+import qualified Data.Set as Set
 
 ------------------------------------------------------------------------
 type API = Summary " Update node according to NodeType params"
@@ -86,9 +95,7 @@ updateNode uId nId (UpdateNodeParamsGraph metric) logStatus = do
                    , _scst_events    = Just []
                    }
 
-  _ <- case metric of
-    Order1 -> recomputeGraph uId nId Conditional
-    Order2 -> recomputeGraph uId nId Distributional
+  _ <- recomputeGraph uId nId (Just metric)
 
   pure  JobLog { _scst_succeeded = Just 2
                , _scst_failed    = Just 0
@@ -114,6 +121,59 @@ updateNode _uId nid1 (LinkNodeReq nt nid2) logStatus = do
                , _scst_events    = Just []
                }
 
+-- | `Advanced` to update graphs
+updateNode _uId lId (UpdateNodeParamsList Advanced) logStatus = do
+  logStatus JobLog { _scst_succeeded = Just 1
+                   , _scst_failed    = Just 0
+                   , _scst_remaining = Just 2
+                   , _scst_events    = Just []
+                   }
+  corpusId <- view node_parent_id <$> getNode lId
+
+  logStatus JobLog { _scst_succeeded = Just 2
+                   , _scst_failed    = Just 0
+                   , _scst_remaining = Just 1
+                   , _scst_events    = Just []
+                   }
+
+  _ <- case corpusId of
+    Just cId -> do
+      _ <- Metrics.updatePie' cId (Just lId) NgramsTypes.Authors Nothing
+      _ <- Metrics.updateTree' cId (Just lId) NgramsTypes.Institutes MapTerm
+      _ <- Metrics.updatePie' cId (Just lId) NgramsTypes.Sources Nothing
+      pure ()
+    Nothing  -> pure ()
+
+  pure  JobLog { _scst_succeeded = Just 3
+               , _scst_failed    = Just 0
+               , _scst_remaining = Just 0
+               , _scst_events    = Just []
+               }
+
+updateNode _uId lId (UpdateNodeParamsList _mode) logStatus = do
+  logStatus JobLog { _scst_succeeded = Just 1
+                   , _scst_failed    = Just 0
+                   , _scst_remaining = Just 2
+                   , _scst_events    = Just []
+                   }
+  corpusId <- view node_parent_id <$> getNode lId
+
+  logStatus JobLog { _scst_succeeded = Just 2
+                   , _scst_failed    = Just 0
+                   , _scst_remaining = Just 1
+                   , _scst_events    = Just []
+                   }
+
+  _ <- case corpusId of
+    Just cId -> reIndexWith cId lId NgramsTerms (Set.singleton MapTerm)
+    Nothing  -> pure ()
+
+  pure  JobLog { _scst_succeeded = Just 3
+               , _scst_failed    = Just 0
+               , _scst_remaining = Just 0
+               , _scst_events    = Just []
+               }
+
 
 updateNode _uId _nId _p logStatus = do
   simuLogs logStatus 10
@@ -121,10 +181,10 @@ updateNode _uId _nId _p logStatus = do
 ------------------------------------------------------------------------
 -- TODO unPrefix "pn_" FromJSON, ToJSON, ToSchema, adapt frontend.
 instance FromJSON  UpdateNodeParams where
-  parseJSON = genericParseJSON (defaultOptions { sumEncoding = ObjectWithSingleField })
+  parseJSON = genericParseJSON (defaultOptions { sumEncoding = GUA.defaultTaggedObject })
 
 instance ToJSON    UpdateNodeParams where
-  toJSON = genericToJSON (defaultOptions { sumEncoding = ObjectWithSingleField })
+  toJSON = genericToJSON (defaultOptions { sumEncoding = GUA.defaultTaggedObject })
   
 instance ToSchema  UpdateNodeParams
 instance Arbitrary UpdateNodeParams where