2 Module : Gargantext.Viz.Phylo.API
3 Description : Phylo API
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 {-# OPTIONS_GHC -fno-warn-orphans #-}
14 {-# LANGUAGE RankNTypes #-}
15 {-# LANGUAGE DataKinds #-}
16 {-# LANGUAGE NoImplicitPrelude #-}
17 {-# LANGUAGE OverloadedStrings #-} -- allows to write Text literals
18 {-# LANGUAGE OverloadedLists #-} -- allows to write Map and HashMap as lists
19 {-# LANGUAGE TypeOperators #-}
20 {-# LANGUAGE FlexibleInstances #-}
21 {-# LANGUAGE MultiParamTypeClasses #-}
23 module Gargantext.Viz.Phylo.API
26 import Data.String.Conversions
27 --import Control.Monad.Reader (ask)
28 import qualified Data.ByteString as DB
29 import qualified Data.ByteString.Lazy as DBL
31 import Gargantext.API.Types
32 import Gargantext.Database.Types.Node (PhyloId, ListId, CorpusId)
33 import Gargantext.Database.Schema.Node (insertNodes, nodePhyloW, getNodePhylo)
34 import Gargantext.Database.Types.Node -- (NodePhylo(..))
35 import Gargantext.Prelude
36 import Gargantext.Viz.Phylo
37 import Gargantext.Viz.Phylo.Main
38 import Gargantext.Viz.Phylo.Example
39 import Gargantext.API.Ngrams (TODO(..))
41 import Servant.Job.Utils (swaggerOptions)
42 import Test.QuickCheck (elements)
43 import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
44 import Web.HttpApiData (parseUrlPiece, readTextData)
45 import Control.Monad.IO.Class (liftIO)
46 import Network.HTTP.Media ((//), (/:))
48 ------------------------------------------------------------------------
49 type PhyloAPI = Summary "Phylo API"
55 phyloAPI :: PhyloId -> UserId -> GargServer PhyloAPI
56 phyloAPI n u = getPhylo n
61 newtype SVG = SVG DB.ByteString
65 declareNamedSchema _ = declareNamedSchema (Proxy :: Proxy TODO)
67 instance Show SVG where
70 instance Accept SVG where
71 contentType _ = "SVG" // "image/svg+xml" /: ("charset", "utf-8")
73 instance Show a => MimeRender PlainText a where
74 mimeRender _ val = cs ("" <> show val)
76 instance MimeRender SVG SVG where
77 mimeRender _ (SVG s) = DBL.fromStrict s
79 ------------------------------------------------------------------------
80 type GetPhylo = QueryParam "listId" ListId
81 :> QueryParam "level" Level
82 :> QueryParam "minSizeBranch" MinSizeBranch
83 :> QueryParam "filiation" Filiation
84 :> QueryParam "childs" Bool
85 :> QueryParam "depth" Level
86 :> QueryParam "metrics" [Metric]
87 :> QueryParam "periodsInf" Int
88 :> QueryParam "periodsSup" Int
89 :> QueryParam "minNodes" Int
90 :> QueryParam "taggers" [Tagger]
91 :> QueryParam "sort" Sort
92 :> QueryParam "order" Order
93 :> QueryParam "export" ExportMode
94 :> QueryParam "display" DisplayMode
95 :> QueryParam "verbose" Bool
99 -- Add real text processing
100 -- Fix Filter parameters
101 getPhylo :: PhyloId -> GargServer GetPhylo
102 getPhylo phId _lId l msb _f _b _l' _ms _x _y _z _ts _s _o _e _d _b' = do
103 phNode <- getNodePhylo phId
106 level = maybe 1 identity l
107 branc = maybe 2 identity msb
108 maybePhylo = hyperdataPhylo_data $ _node_hyperdata phNode
110 p <- liftIO $ viewPhylo2Svg $ viewPhylo level branc $ maybe phyloFromQuery identity maybePhylo
112 ------------------------------------------------------------------------
113 type PostPhylo = QueryParam "listId" ListId
114 :> ReqBody '[JSON] PhyloQueryBuild
115 :> (Post '[JSON] NodeId)
117 postPhylo :: CorpusId -> UserId -> GargServer PostPhylo
118 postPhylo n userId _lId _q = do
119 -- TODO get Reader settings
122 -- _vrs = Just ("1" :: Text)
123 -- _sft = Just (Software "Gargantext" "4")
124 -- _prm = initPhyloParam vrs sft (Just q)
126 pId <- insertNodes [nodePhyloW (Just "Phylo") (Just $ HyperdataPhylo Nothing (Just ph)) n userId]
127 pure $ NodeId (fromIntegral pId)
129 ------------------------------------------------------------------------
130 -- | DELETE Phylo == delete a node
131 ------------------------------------------------------------------------
132 ------------------------------------------------------------------------
134 type PutPhylo = (Put '[JSON] Phylo )
135 --putPhylo :: PhyloId -> Maybe ListId -> PhyloQueryBuild -> Phylo
136 putPhylo :: PhyloId -> GargServer PutPhylo
142 instance Arbitrary PhyloView
144 arbitrary = elements [phyloView]
146 -- | TODO add phyloGroup ex
147 instance Arbitrary PhyloGroup
149 arbitrary = elements []
151 instance Arbitrary Phylo
153 arbitrary = elements [phylo]
155 instance ToSchema Cluster
156 instance ToSchema EdgeType
157 instance ToSchema Filiation
158 instance ToSchema Filter
159 instance ToSchema FisParams
160 instance ToSchema HammingParams
161 instance ToSchema LouvainParams
162 instance ToSchema Metric
163 instance ToSchema Order
164 instance ToSchema Phylo
165 instance ToSchema PhyloFis
166 instance ToSchema PhyloBranch
167 instance ToSchema PhyloEdge
168 instance ToSchema PhyloGroup
169 instance ToSchema PhyloLevel
170 instance ToSchema PhyloNode
171 instance ToSchema PhyloParam
172 instance ToSchema PhyloFoundations
173 instance ToSchema PhyloPeriod
174 instance ToSchema PhyloQueryBuild
175 instance ToSchema PhyloView
176 instance ToSchema RCParams
177 instance ToSchema LBParams
178 instance ToSchema SBParams
179 instance ToSchema Software
180 instance ToSchema WLJParams
183 instance ToParamSchema Order
184 instance FromHttpApiData Order
186 parseUrlPiece = readTextData
189 instance ToParamSchema Metric
190 instance FromHttpApiData [Metric]
192 parseUrlPiece = readTextData
193 instance FromHttpApiData Metric
195 parseUrlPiece = readTextData
198 instance ToParamSchema DisplayMode
199 instance FromHttpApiData DisplayMode
201 parseUrlPiece = readTextData
204 instance ToParamSchema ExportMode
205 instance FromHttpApiData ExportMode
207 parseUrlPiece = readTextData
210 instance FromHttpApiData Sort
212 parseUrlPiece = readTextData
213 instance ToParamSchema Sort
216 instance ToSchema Proximity
218 declareNamedSchema = genericDeclareNamedSchemaUnrestricted
222 instance FromHttpApiData [Tagger]
224 parseUrlPiece = readTextData
225 instance FromHttpApiData Tagger
227 parseUrlPiece = readTextData
228 instance ToParamSchema Tagger
230 instance FromHttpApiData Filiation
232 parseUrlPiece = readTextData
233 instance ToParamSchema Filiation