2 Module : Gargantext.Viz.Phylo.Tools
3 Description : Phylomemy Tools to build/manage it
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
13 {-# OPTIONS_GHC -fno-warn-orphans #-}
15 {-# LANGUAGE RankNTypes #-}
16 {-# LANGUAGE NoImplicitPrelude #-}
17 {-# LANGUAGE OverloadedStrings #-} -- allows to write Text literals
18 {-# LANGUAGE OverloadedLists #-} -- allows to write Map and HashMap as lists
19 {-# LANGUAGE DataKinds #-}
20 {-# LANGUAGE TypeOperators #-}
22 module Gargantext.Viz.Graph.API
25 import Control.Lens (set)
26 import Control.Monad.IO.Class (liftIO)
27 import Gargantext.API.Ngrams.Tools
28 import Gargantext.API.Types
29 import Gargantext.Core.Types.Main
30 import Gargantext.Database.Config
31 import Gargantext.Database.Metrics.NgramsByNode (getNodesByNgramsOnlyUser)
32 import Gargantext.Database.Schema.Ngrams
33 import Gargantext.Database.Node.Select
34 import Gargantext.Database.Schema.Node (getNode)
35 import Gargantext.Database.Schema.Node (defaultList)
36 import Gargantext.Database.Types.Node hiding (node_id) -- (GraphId, ListId, CorpusId, NodeId)
37 import Gargantext.Prelude
38 import Gargantext.Viz.Graph
39 import Gargantext.Viz.Graph.Tools -- (cooc2graph)
41 import qualified Data.Map as Map
43 ------------------------------------------------------------------------
45 -- | There is no Delete specific API for Graph since it can be deleted
47 type GraphAPI = Get '[JSON] Graph
48 :<|> Post '[JSON] [GraphId]
52 graphAPI :: NodeId -> GargServer GraphAPI
53 graphAPI n = getGraph n
57 ------------------------------------------------------------------------
59 getGraph :: NodeId -> GargServer (Get '[JSON] Graph)
61 nodeGraph <- getNode nId HyperdataGraph
63 let cId = maybe (panic "no parentId") identity $ _node_parentId nodeGraph
64 lId <- defaultList cId
66 let metadata = GraphMetadata "Title" [maybe 0 identity $ _node_parentId nodeGraph]
67 [ LegendField 1 "#FFF" "Cluster"
68 , LegendField 2 "#FFF" "Cluster"
71 -- (map (\n -> LegendField n "#FFFFFF" (pack $ show n)) [1..10])
73 lIds <- selectNodesWithUsername NodeList userMaster
74 ngs <- filterListWithRoot GraphTerm <$> mapTermListRoot [lId] NgramsTerms
76 myCooc <- Map.filter (>1) <$> getCoocByNgrams (Diagonal False)
77 <$> groupNodesByNgrams ngs
78 <$> getNodesByNgramsOnlyUser cId (lIds <> [lId]) NgramsTerms (Map.keys ngs)
80 graph <- liftIO $ cooc2graph 1 myCooc
81 pure $ set graph_metadata (Just metadata) graph
84 postGraph :: NodeId -> GargServer (Post '[JSON] [NodeId])
87 putGraph :: NodeId -> GargServer (Put '[JSON] Int)