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 FlexibleContexts #-}
16 {-# LANGUAGE FlexibleInstances #-}
17 {-# LANGUAGE RankNTypes #-}
18 {-# LANGUAGE NoImplicitPrelude #-}
19 {-# LANGUAGE OverloadedStrings #-} -- allows to write Text literals
20 {-# LANGUAGE OverloadedLists #-} -- allows to write Map and HashMap as lists
21 {-# LANGUAGE DataKinds #-}
22 {-# LANGUAGE TypeOperators #-}
24 module Gargantext.Viz.Graph.API
27 import Control.Lens (set)
28 import Control.Monad.IO.Class (liftIO)
29 import Gargantext.API.Ngrams.Tools
30 import Gargantext.API.Types
31 import Gargantext.Core.Types.Main
32 import Gargantext.Database.Config
33 import Gargantext.Database.Metrics.NgramsByNode (getNodesByNgramsOnlyUser)
34 import Gargantext.Database.Schema.Ngrams
35 import Gargantext.Database.Node.Select
36 import Gargantext.Database.Schema.Node (getNode)
37 import Gargantext.Database.Schema.Node (defaultList)
38 import Gargantext.Database.Types.Node hiding (node_id) -- (GraphId, ListId, CorpusId, NodeId)
39 import Gargantext.Prelude
40 import Gargantext.Viz.Graph
41 import Gargantext.Viz.Graph.Tools -- (cooc2graph)
43 import qualified Data.Map as Map
45 ------------------------------------------------------------------------
47 -- | There is no Delete specific API for Graph since it can be deleted
49 type GraphAPI = Get '[JSON] Graph
50 :<|> Post '[JSON] [GraphId]
54 graphAPI :: NodeId -> GargServer GraphAPI
55 graphAPI n = getGraph n
59 ------------------------------------------------------------------------
61 getGraph :: NodeId -> GargServer (Get '[JSON] Graph)
63 nodeGraph <- getNode nId HyperdataGraph
64 -- get HyperdataGraphp from Database
65 -- if Nothing else if version == current version then compute
67 let cId = maybe (panic "no parentId") identity $ _node_parentId nodeGraph
68 lId <- defaultList cId
70 let metadata = GraphMetadata "Title" [maybe 0 identity $ _node_parentId nodeGraph]
71 [ LegendField 1 "#FFF" "Cluster"
72 , LegendField 2 "#FFF" "Cluster"
75 -- (map (\n -> LegendField n "#FFFFFF" (pack $ show n)) [1..10])
77 lIds <- selectNodesWithUsername NodeList userMaster
78 ngs <- filterListWithRoot GraphTerm <$> mapTermListRoot [lId] NgramsTerms
80 myCooc <- Map.filter (>1) <$> getCoocByNgrams (Diagonal False)
81 <$> groupNodesByNgrams ngs
82 <$> getNodesByNgramsOnlyUser cId (lIds <> [lId]) NgramsTerms (Map.keys ngs)
84 graph <- liftIO $ cooc2graph 0 myCooc
85 pure $ set graph_metadata (Just metadata) graph
88 postGraph :: NodeId -> GargServer (Post '[JSON] [NodeId])
91 putGraph :: NodeId -> GargServer (Put '[JSON] Int)