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
13 {-# OPTIONS_GHC -fno-warn-orphans #-}
16 {-# LANGUAGE RankNTypes #-}
17 {-# LANGUAGE DataKinds #-}
18 {-# LANGUAGE NoImplicitPrelude #-}
19 {-# LANGUAGE OverloadedStrings #-} -- allows to write Text literals
20 {-# LANGUAGE OverloadedLists #-} -- allows to write Map and HashMap as lists
21 {-# LANGUAGE TypeOperators #-}
22 {-# LANGUAGE FlexibleInstances #-}
24 module Gargantext.Viz.Phylo.API
27 --import Control.Monad.Reader (ask)
28 import Data.Text (Text)
30 import Gargantext.API.Types
31 import Gargantext.Database.Types.Node (PhyloId, ListId, CorpusId)
32 import Gargantext.Prelude
33 import Gargantext.Viz.Phylo
34 import Gargantext.Viz.Phylo.Example
35 import Gargantext.Viz.Phylo.Tools
36 import Gargantext.Viz.Phylo.View.ViewMaker
37 import Gargantext.Viz.Phylo.LevelMaker
39 import Servant.Job.Utils (swaggerOptions)
40 import Test.QuickCheck (elements)
41 import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
42 import Web.HttpApiData (parseUrlPiece, readTextData)
44 ------------------------------------------------------------------------
45 type PhyloAPI = Summary "Phylo API"
51 phyloAPI :: PhyloId -> GargServer PhyloAPI
52 phyloAPI n = getPhylo n
56 ------------------------------------------------------------------------
57 type GetPhylo = QueryParam "listId" ListId
58 :> QueryParam "level" Level
59 :> QueryParam "filiation" Filiation
60 :> QueryParam "childs" Bool
61 :> QueryParam "depth" Level
62 :> QueryParam "metrics" [Metric]
63 :> QueryParam "periodsInf" Int
64 :> QueryParam "periodsSup" Int
65 :> QueryParam "minNodes" Int
66 :> QueryParam "taggers" [Tagger]
67 :> QueryParam "sort" Sort
68 :> QueryParam "order" Order
69 :> QueryParam "export" ExportMode
70 :> QueryParam "display" DisplayMode
71 :> QueryParam "verbose" Bool
72 :> Get '[JSON] PhyloView
75 -- Add real text processing
76 -- Fix Filter parameters
77 getPhylo :: PhyloId -> GargServer GetPhylo
78 getPhylo _phyloId _lId l f b l' ms x y z ts s o e d b' = do
80 fs' = maybe (Just []) (\p -> Just [p]) $ LonelyBranch <$> (LBParams <$> x <*> y <*> z)
82 q = initPhyloQueryView l f b l' ms fs' ts so e d b'
83 -- | TODO remove phylo for real data here
84 pure (toPhyloView q phylo)
86 ------------------------------------------------------------------------
88 type PutPhylo = (Put '[JSON] Phylo )
89 --putPhylo :: PhyloId -> Maybe ListId -> PhyloQueryBuild -> Phylo
90 putPhylo :: PhyloId -> GargServer PutPhylo
93 ------------------------------------------------------------------------
94 type PostPhylo = QueryParam "listId" ListId
95 :> ReqBody '[JSON] PhyloQueryBuild
96 :> (Post '[JSON] Phylo)
98 postPhylo :: CorpusId -> GargServer PostPhylo
99 postPhylo _n _lId q = do
100 -- TODO get Reader settings
103 vrs = Just ("1" :: Text)
104 sft = Just (Software "Gargantext" "4")
105 prm = initPhyloParam vrs sft (Just q)
106 pure (toPhyloBase q prm corpus actants termList)
109 ------------------------------------------------------------------------
110 -- | DELETE Phylo == delete a node
111 ------------------------------------------------------------------------
117 instance Arbitrary PhyloView
119 arbitrary = elements [phyloView]
121 -- | TODO add phyloGroup ex
122 instance Arbitrary PhyloGroup
124 arbitrary = elements []
126 instance Arbitrary Phylo
128 arbitrary = elements [phylo]
131 instance ToSchema Cluster
132 instance ToSchema EdgeType
133 instance ToSchema Filiation
134 instance ToSchema Filter
135 instance ToSchema FisParams
136 instance ToSchema HammingParams
137 instance ToSchema LouvainParams
138 instance ToSchema Metric
139 instance ToSchema Order
140 instance ToSchema Phylo
141 instance ToSchema PhyloBranch
142 instance ToSchema PhyloEdge
143 instance ToSchema PhyloGroup
144 instance ToSchema PhyloLevel
145 instance ToSchema PhyloNode
146 instance ToSchema PhyloParam
147 instance ToSchema PhyloFoundations
148 instance ToSchema PhyloPeriod
149 instance ToSchema PhyloQueryBuild
150 instance ToSchema PhyloView
151 instance ToSchema RCParams
152 instance ToSchema LBParams
153 instance ToSchema SBParams
154 instance ToSchema Software
155 instance ToSchema WLJParams
158 instance ToParamSchema Order
159 instance FromHttpApiData Order
161 parseUrlPiece = readTextData
164 instance ToParamSchema Metric
165 instance FromHttpApiData [Metric]
167 parseUrlPiece = readTextData
168 instance FromHttpApiData Metric
170 parseUrlPiece = readTextData
173 instance ToParamSchema DisplayMode
174 instance FromHttpApiData DisplayMode
176 parseUrlPiece = readTextData
179 instance ToParamSchema ExportMode
180 instance FromHttpApiData ExportMode
182 parseUrlPiece = readTextData
185 instance FromHttpApiData Sort
187 parseUrlPiece = readTextData
188 instance ToParamSchema Sort
191 instance ToSchema Proximity
193 declareNamedSchema = genericDeclareNamedSchemaUnrestricted
197 instance FromHttpApiData [Tagger]
199 parseUrlPiece = readTextData
200 instance FromHttpApiData Tagger
202 parseUrlPiece = readTextData
203 instance ToParamSchema Tagger
205 instance FromHttpApiData Filiation
207 parseUrlPiece = readTextData
208 instance ToParamSchema Filiation