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 "display" DisplayMode
70 :> QueryParam "verbose" Bool
71 :> Get '[JSON] PhyloView
74 -- Add real text processing
75 -- Fix Filter parameters
76 getPhylo :: PhyloId -> GargServer GetPhylo
77 getPhylo _phyloId _lId l f b l' ms x y z ts s o d b' = do
79 fs' = maybe (Just []) (\p -> Just [p]) $ SmallBranch <$> (SBParams <$> x <*> y <*> z)
81 q = initPhyloQueryView l f b l' ms fs' ts so d b'
82 -- | TODO remove phylo for real data here
83 pure (toPhyloView q phylo)
85 ------------------------------------------------------------------------
87 type PutPhylo = (Put '[JSON] Phylo )
88 --putPhylo :: PhyloId -> Maybe ListId -> PhyloQueryBuild -> Phylo
89 putPhylo :: PhyloId -> GargServer PutPhylo
92 ------------------------------------------------------------------------
93 type PostPhylo = QueryParam "listId" ListId
94 :> ReqBody '[JSON] PhyloQueryBuild
95 :> (Post '[JSON] Phylo)
97 postPhylo :: CorpusId -> GargServer PostPhylo
98 postPhylo _n _lId q = do
99 -- TODO get Reader settings
102 vrs = Just ("1" :: Text)
103 sft = Just (Software "Gargantext" "4")
104 prm = initPhyloParam vrs sft (Just q)
105 pure (toPhyloBase q prm corpus actants actantsTrees)
108 ------------------------------------------------------------------------
109 -- | DELETE Phylo == delete a node
110 ------------------------------------------------------------------------
116 instance Arbitrary PhyloView
118 arbitrary = elements [phyloView]
120 -- | TODO add phyloGroup ex
121 instance Arbitrary PhyloGroup
123 arbitrary = elements []
125 instance Arbitrary Phylo
127 arbitrary = elements [phylo]
130 instance ToSchema Cluster
131 instance ToSchema EdgeType
132 instance ToSchema Filiation
133 instance ToSchema Filter
134 instance ToSchema FisParams
135 instance ToSchema HammingParams
136 instance ToSchema LouvainParams
137 instance ToSchema Metric
138 instance ToSchema Order
139 instance ToSchema Phylo
140 instance ToSchema PhyloBranch
141 instance ToSchema PhyloEdge
142 instance ToSchema PhyloGroup
143 instance ToSchema PhyloLevel
144 instance ToSchema PhyloNode
145 instance ToSchema PhyloParam
146 instance ToSchema PhyloPeaks
147 instance ToSchema PhyloPeriod
148 instance ToSchema PhyloQueryBuild
149 instance ToSchema PhyloView
150 instance ToSchema RCParams
151 instance ToSchema SBParams
152 instance ToSchema Software
153 instance ToSchema WLJParams
156 instance ToParamSchema Order
157 instance FromHttpApiData Order
159 parseUrlPiece = readTextData
162 instance ToParamSchema Metric
163 instance FromHttpApiData [Metric]
165 parseUrlPiece = readTextData
166 instance FromHttpApiData Metric
168 parseUrlPiece = readTextData
171 instance ToParamSchema DisplayMode
172 instance FromHttpApiData DisplayMode
174 parseUrlPiece = readTextData
177 instance FromHttpApiData Sort
179 parseUrlPiece = readTextData
180 instance ToParamSchema Sort
182 instance (ToSchema a) => ToSchema (Tree a)
184 declareNamedSchema = genericDeclareNamedSchemaUnrestricted
187 instance ToSchema Proximity
189 declareNamedSchema = genericDeclareNamedSchemaUnrestricted
193 instance FromHttpApiData [Tagger]
195 parseUrlPiece = readTextData
196 instance FromHttpApiData Tagger
198 parseUrlPiece = readTextData
199 instance ToParamSchema Tagger
201 instance FromHttpApiData Filiation
203 parseUrlPiece = readTextData
204 instance ToParamSchema Filiation