Add client function for main GraphQL endpoint
[gargantext.git] / src / Gargantext / Core / Viz / Chart.hs
index da97975c25f1791f6c8927687b548ce5b227550a..51bd69f1fb6d161f37310bba6db930551aadfd5f 100644 (file)
@@ -17,7 +17,6 @@ module Gargantext.Core.Viz.Chart
 import Data.List (sortOn)
 import Data.Map (toList)
 import qualified Data.List as List
-import qualified Data.Map as Map
 import Data.Maybe (catMaybes)
 import qualified Data.Vector as V
 
@@ -26,7 +25,7 @@ import Gargantext.Database.Admin.Config
 import Gargantext.Database.Prelude
 import Gargantext.Database.Query.Table.Node
 import Gargantext.Database.Query.Table.Node.Select
-import Gargantext.Database.Query.Table.NodeNode (selectDocsDates)
+import Gargantext.Database.Query.Table.NodeContext (selectDocsDates)
 import Gargantext.Database.Schema.Node
 import Gargantext.Prelude
 import Gargantext.Core.Text.Metrics.Count (occurrencesWith)
@@ -34,11 +33,14 @@ import Gargantext.Core.Text.Metrics.Count (occurrencesWith)
 -- Pie Chart
 import Gargantext.API.Ngrams.NgramsTree
 import Gargantext.API.Ngrams.Tools
+import Gargantext.API.Ngrams.Types
 import Gargantext.Core.Types
-import Gargantext.Database.Action.Flow
-import Gargantext.Database.Action.Metrics.NgramsByNode
+import Gargantext.Database.Action.Flow.Types
+import Gargantext.Database.Action.Metrics.NgramsByContext
 import Gargantext.Database.Schema.Ngrams
 import Gargantext.Core.Viz.Types
+import qualified Data.HashMap.Strict as HashMap
+
 
 histoData :: CorpusId -> Cmd err Histo
 histoData cId = do
@@ -57,34 +59,38 @@ chartData :: FlowCmdM env err m
 chartData cId nt lt = do
   ls' <- selectNodesWithUsername NodeList userMaster
   ls <- map (_node_id) <$> getListsWithParentId cId
-  ts <- mapTermListRoot ls nt <$> getRepo
+  ts <- mapTermListRoot ls nt <$> getRepo' ls
   let
-    dico = filterListWithRoot lt ts
-    terms = catMaybes $ List.concat $ map (\(a,b) -> [Just a, b]) $ Map.toList dico
-    group dico' x = case Map.lookup x dico' of
+    dico = filterListWithRoot [lt] ts
+    terms = catMaybes $ List.concat $ map (\(a,b) -> [Just a, b]) $ HashMap.toList dico
+    group dico' x = case HashMap.lookup x dico' of
         Nothing -> x
         Just x' -> maybe x identity x'
 
-  (_total,mapTerms) <- countNodesByNgramsWith (group dico)
-                    <$> getNodesByNgramsOnlyUser cId (ls' <> ls) nt terms
-  let (dates, count) = V.unzip $ fmap (\(t,(d,_)) -> (t, d)) $ V.fromList $ Map.toList mapTerms
-  pure (Histo (dates) (round <$> count))
+  (_total,mapTerms) <- countContextsByNgramsWith (group dico)
+                    <$> getContextsByNgramsOnlyUser cId (ls' <> ls) nt terms
+  let (dates, count) = V.unzip $
+                       V.fromList $
+                       List.sortOn snd $
+                       (\(NgramsTerm t,(d,_)) -> (t, d)) <$>
+                       HashMap.toList mapTerms
+  pure (Histo dates (round <$> count))
 
 
 treeData :: FlowCmdM env err m
         => CorpusId -> NgramsType -> ListType
-        -> m [NgramsTree]
+        -> m (V.Vector NgramsTree)
 treeData cId nt lt = do
   ls' <- selectNodesWithUsername NodeList userMaster
   ls <- map (_node_id) <$> getListsWithParentId cId
-  ts <- mapTermListRoot ls nt <$> getRepo
+  ts <- mapTermListRoot ls nt <$> getRepo' ls
 
   let
-    dico = filterListWithRoot lt ts
-    terms = catMaybes $ List.concat $ map (\(a,b) -> [Just a, b]) $ Map.toList dico
+    dico = filterListWithRoot [lt] ts
+    terms = catMaybes $ List.concat $ map (\(a,b) -> [Just a, b]) $ HashMap.toList dico
 
-  cs' <- getNodesByNgramsOnlyUser cId (ls' <> ls) nt terms
+  cs' <- getContextsByNgramsOnlyUser cId (ls' <> ls) nt terms
 
   m  <- getListNgrams ls nt
-  pure $ toTree lt cs' m
+  pure $ V.fromList $ toTree lt cs' m