Commit e10cf51e authored by Alexandre Delanoë's avatar Alexandre Delanoë

[REST][PHYLO] Parameters, todo: test query.

parent 398223ff
...@@ -56,13 +56,10 @@ import Gargantext.Database.Schema.Node ( getNodesWithParentId, getNode, deleteNo ...@@ -56,13 +56,10 @@ import Gargantext.Database.Schema.Node ( getNodesWithParentId, getNode, deleteNo
import Gargantext.Database.Schema.NodeNode (nodesToFavorite, nodesToTrash) import Gargantext.Database.Schema.NodeNode (nodesToFavorite, nodesToTrash)
import Gargantext.Database.Tree (treeDB, HasTreeError(..), TreeError(..)) import Gargantext.Database.Tree (treeDB, HasTreeError(..), TreeError(..))
import Gargantext.Database.Types.Node import Gargantext.Database.Types.Node
import Gargantext.Database.Types.Node (CorpusId, ContactId)
import Gargantext.Database.Utils -- (Cmd, CmdM) import Gargantext.Database.Utils -- (Cmd, CmdM)
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Text.Metrics (Scored(..)) import Gargantext.Text.Metrics (Scored(..))
import Gargantext.Viz.Phylo.API (PhyloAPI, phyloAPI)
import Gargantext.Viz.Phylo hiding (Tree)
import Gargantext.Viz.Phylo.API (getPhylo)
import Servant import Servant
import Test.QuickCheck (elements) import Test.QuickCheck (elements)
import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary) import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
...@@ -276,16 +273,6 @@ type ChartApi = Summary " Chart API" ...@@ -276,16 +273,6 @@ type ChartApi = Summary " Chart API"
------------------------------------------------------------------------ ------------------------------------------------------------------------
type PhyloAPI = Summary "Phylo API"
-- :> QueryParam "param" PhyloQueryView
:> Get '[JSON] PhyloView
phyloAPI :: NodeId -> GargServer PhyloAPI
phyloAPI n = pure $ getPhylo n
instance HasNodeError ServantErr where instance HasNodeError ServantErr where
_NodeError = prism' mk (const Nothing) -- $ panic "HasNodeError ServantErr: not a prism") _NodeError = prism' mk (const Nothing) -- $ panic "HasNodeError ServantErr: not a prism")
where where
......
{-|
Module : Gargantext.Viz.Chart
Description : Chart management
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
-}
{-# LANGUAGE NoImplicitPrelude #-}
module Gargantext.Viz.Chart where
...@@ -43,7 +43,7 @@ import qualified Data.Map as Map ...@@ -43,7 +43,7 @@ import qualified Data.Map as Map
-- | There is no Delete specific API for Graph since it can be deleted -- | There is no Delete specific API for Graph since it can be deleted
-- as simple Node. -- as simple Node.
type GraphAPI = Get '[JSON] Graph type GraphAPI = Get '[JSON] Graph
:<|> Post '[JSON] [NodeId] :<|> Post '[JSON] [GraphId]
:<|> Put '[JSON] Int :<|> Put '[JSON] Int
......
...@@ -29,6 +29,7 @@ one 8, e54847. ...@@ -29,6 +29,7 @@ one 8, e54847.
module Gargantext.Viz.Phylo where module Gargantext.Viz.Phylo where
import Prelude (Bounded)
import Control.Lens (makeLenses) import Control.Lens (makeLenses)
import Data.Aeson.TH (deriveJSON,defaultOptions) import Data.Aeson.TH (deriveJSON,defaultOptions)
import Data.Maybe (Maybe) import Data.Maybe (Maybe)
...@@ -89,7 +90,7 @@ data PhyloPeaks = ...@@ -89,7 +90,7 @@ data PhyloPeaks =
deriving (Generic, Show, Eq) deriving (Generic, Show, Eq)
-- | A Tree of Ngrams where each node is a label -- | A Tree of Ngrams where each node is a label
data Tree a = Empty | Node a [Tree a] deriving (Show, Eq) data Tree a = Empty | Node a [Tree a] deriving (Generic, Show, Eq)
-- | Date : a simple Integer -- | Date : a simple Integer
...@@ -297,7 +298,7 @@ data SBParams = SBParams ...@@ -297,7 +298,7 @@ data SBParams = SBParams
-- | Metric constructors -- | Metric constructors
data Metric = BranchAge deriving (Generic, Show, Eq) data Metric = BranchAge deriving (Generic, Show, Eq, Read)
---------------- ----------------
...@@ -306,7 +307,8 @@ data Metric = BranchAge deriving (Generic, Show, Eq) ...@@ -306,7 +307,8 @@ data Metric = BranchAge deriving (Generic, Show, Eq)
-- | Tagger constructors -- | Tagger constructors
data Tagger = BranchLabelFreq | GroupLabelCooc | GroupDynamics deriving (Show) data Tagger = BranchLabelFreq | GroupLabelCooc | GroupDynamics
deriving (Generic, Show, Read)
-------------- --------------
...@@ -315,8 +317,8 @@ data Tagger = BranchLabelFreq | GroupLabelCooc | GroupDynamics deriving (Show) ...@@ -315,8 +317,8 @@ data Tagger = BranchLabelFreq | GroupLabelCooc | GroupDynamics deriving (Show)
-- | Sort constructors -- | Sort constructors
data Sort = ByBranchAge deriving (Generic, Show) data Sort = ByBranchAge deriving (Generic, Show, Read, Enum, Bounded)
data Order = Asc | Desc deriving (Generic, Show) data Order = Asc | Desc deriving (Generic, Show, Read)
-------------------- --------------------
...@@ -348,7 +350,7 @@ data PhyloQueryBuild = PhyloQueryBuild ...@@ -348,7 +350,7 @@ data PhyloQueryBuild = PhyloQueryBuild
} deriving (Generic, Show, Eq) } deriving (Generic, Show, Eq)
-- | To choose the Phylo edge you want to export : --> <-- <--> <=> -- | To choose the Phylo edge you want to export : --> <-- <--> <=>
data Filiation = Ascendant | Descendant | Merge | Complete deriving (Generic, Show) data Filiation = Ascendant | Descendant | Merge | Complete deriving (Generic, Show, Read)
data EdgeType = PeriodEdge | LevelEdge deriving (Generic, Show) data EdgeType = PeriodEdge | LevelEdge deriving (Generic, Show)
------------------- -------------------
...@@ -400,6 +402,7 @@ data PhyloNode = PhyloNode ...@@ -400,6 +402,7 @@ data PhyloNode = PhyloNode
data DisplayMode = Flat | Nested data DisplayMode = Flat | Nested
deriving (Generic, Show, Read)
-- | A PhyloQueryView describes a Phylo as an output view -- | A PhyloQueryView describes a Phylo as an output view
data PhyloQueryView = PhyloQueryView data PhyloQueryView = PhyloQueryView
......
...@@ -12,39 +12,110 @@ Portability : POSIX ...@@ -12,39 +12,110 @@ Portability : POSIX
{-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-} -- allows to write Text literals {-# LANGUAGE RankNTypes #-}
{-# LANGUAGE OverloadedLists #-} -- allows to write Map and HashMap as lists {-# LANGUAGE DataKinds #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-} -- allows to write Text literals
{-# LANGUAGE OverloadedLists #-} -- allows to write Map and HashMap as lists
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
module Gargantext.Viz.Phylo.API module Gargantext.Viz.Phylo.API
where where
import Data.Swagger import Data.Swagger
import Servant.Job.Utils (swaggerOptions) import Gargantext.API.Types
import Gargantext.Database.Types.Node (PhyloId, ListId, CorpusId) import Gargantext.Database.Types.Node (PhyloId, ListId, CorpusId)
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Viz.Phylo import Gargantext.Viz.Phylo
import Gargantext.Viz.Phylo.Example import Gargantext.Viz.Phylo.Example
import Gargantext.Viz.Phylo.Tools
import Gargantext.Viz.Phylo.View.ViewMaker
import Servant
import Servant.Job.Utils (swaggerOptions)
import Test.QuickCheck (elements) import Test.QuickCheck (elements)
import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary) import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
import Web.HttpApiData (parseUrlPiece, readTextData)
------------------------------------------------------------------------
type PhyloAPI = Summary "Phylo API"
-- :> QueryParam "param" PhyloQueryView
-- :<|>
:> GetPhylo
:<|> PutPhylo
-- :<|> Capture "id" PhyloId :> Post '[JSON] Phylo
-- :<|> Capture "id" PhyloId :> Put '[JSON] Phylo
phyloAPI :: PhyloId -> GargServer PhyloAPI
phyloAPI n = getPhylo n
:<|> putPhylo n
-- :<|> pure . (postPhylo n)
------------------------------------------------------------------------
type GetPhylo = QueryParam "listId" ListId
:> QueryParam "level" Level
:> QueryParam "filiation" Filiation
:> QueryParam "childs" Bool
:> QueryParam "depth" Level
:> QueryParam "metrics" [Metric]
:> QueryParam "periodsInf" Int
:> QueryParam "periodsSup" Int
:> QueryParam "minNodes" Int
:> QueryParam "taggers" [Tagger]
:> QueryParam "sort" Sort
:> QueryParam "sort" Order
:> QueryParam "display" DisplayMode
:> QueryParam "verbose" Bool
:> Get '[JSON] PhyloView
-- | TODO
-- Add real text processing
-- Fix Filter parameters
getPhylo :: PhyloId -> GargServer GetPhylo
getPhylo _phyloId _lId l f b l' ms x y z ts s o d b' = do
let
fs' = maybe (Just []) (\p -> Just [p]) $ SmallBranch <$> (SBParams <$> x <*> y <*> z)
so = (,) <$> s <*> o
q = initPhyloQueryView l f b l' ms fs' ts so d b'
-- | TODO remove phylo for real data here
pure (toPhyloView q phylo)
------------------------------------------------------------------------
type PutPhylo = (Put '[JSON] Phylo )
--putPhylo :: PhyloId -> Maybe ListId -> PhyloQueryBuild -> Phylo
putPhylo :: PhyloId -> GargServer PutPhylo
putPhylo = undefined
getPhylo :: PhyloId -> PhyloView ------------------------------------------------------------------------
getPhylo _phyloId = phyloView type PostPhylo = (Post '[JSON] Phylo)
--getPhylo :: PhyloId -> Maybe PhyloQueryView -> PhyloView --postPhylo :: CorpusId -> Maybe ListId -> PhyloQueryBuild -> Phylo
--getPhylo _phyloId _phyloQueryView = phyloView postPhylo :: CorpusId -> Phylo
postPhylo :: CorpusId -> Maybe ListId -> PhyloQueryBuild -> Phylo
postPhylo = undefined postPhylo = undefined
putPhylo :: PhyloId -> Maybe ListId -> PhyloQueryBuild -> Phylo ------------------------------------------------------------------------
putPhylo = undefined -- | DELETE Phylo == delete a node
------------------------------------------------------------------------
-- | Instances
instance Arbitrary PhyloView
where
arbitrary = elements [phyloView]
-- | TODO add phyloGroup ex
instance Arbitrary PhyloGroup
where
arbitrary = elements []
instance Arbitrary Phylo
where
arbitrary = elements [phylo]
deletePhylo :: PhyloId -> IO ()
deletePhylo = undefined
-- | Instances
instance ToSchema Cluster instance ToSchema Cluster
instance ToSchema EdgeType instance ToSchema EdgeType
...@@ -54,10 +125,16 @@ instance ToSchema FisParams ...@@ -54,10 +125,16 @@ instance ToSchema FisParams
instance ToSchema HammingParams instance ToSchema HammingParams
instance ToSchema LouvainParams instance ToSchema LouvainParams
instance ToSchema Metric instance ToSchema Metric
instance ToSchema Order
instance ToSchema Phylo
instance ToSchema PhyloBranch instance ToSchema PhyloBranch
instance ToSchema PhyloEdge instance ToSchema PhyloEdge
instance ToSchema PhyloGroup
instance ToSchema PhyloLevel
instance ToSchema PhyloNode instance ToSchema PhyloNode
instance ToSchema PhyloParam instance ToSchema PhyloParam
instance ToSchema PhyloPeaks
instance ToSchema PhyloPeriod
instance ToSchema PhyloQueryBuild instance ToSchema PhyloQueryBuild
instance ToSchema PhyloView instance ToSchema PhyloView
instance ToSchema RCParams instance ToSchema RCParams
...@@ -65,12 +142,56 @@ instance ToSchema SBParams ...@@ -65,12 +142,56 @@ instance ToSchema SBParams
instance ToSchema Software instance ToSchema Software
instance ToSchema WLJParams instance ToSchema WLJParams
instance ToParamSchema Order
instance FromHttpApiData Order
where
parseUrlPiece = readTextData
instance ToParamSchema Metric
instance FromHttpApiData [Metric]
where
parseUrlPiece = readTextData
instance FromHttpApiData Metric
where
parseUrlPiece = readTextData
instance ToParamSchema DisplayMode
instance FromHttpApiData DisplayMode
where
parseUrlPiece = readTextData
instance FromHttpApiData Sort
where
parseUrlPiece = readTextData
instance ToParamSchema Sort
instance (ToSchema a) => ToSchema (Tree a)
where
declareNamedSchema = genericDeclareNamedSchemaUnrestricted
$ swaggerOptions ""
instance ToSchema Proximity instance ToSchema Proximity
where where
declareNamedSchema = genericDeclareNamedSchemaUnrestricted declareNamedSchema = genericDeclareNamedSchemaUnrestricted
$ swaggerOptions "" $ swaggerOptions ""
instance Arbitrary PhyloView
instance FromHttpApiData [Tagger]
where where
arbitrary = elements [phyloView] parseUrlPiece = readTextData
instance FromHttpApiData Tagger
where
parseUrlPiece = readTextData
instance ToParamSchema Tagger
instance FromHttpApiData Filiation
where
parseUrlPiece = readTextData
instance ToParamSchema Filiation
...@@ -133,6 +133,19 @@ addChildNodes shouldDo lvl lvlMin vb fl p v = ...@@ -133,6 +133,19 @@ addChildNodes shouldDo lvl lvlMin vb fl p v =
-- | To transform a PhyloQuery into a PhyloView -- | To transform a PhyloQuery into a PhyloView
toPhyloView' :: Maybe Level
-> Maybe Filiation
-> Maybe Bool
-> Maybe Level
-> Maybe [Metric]
-> Maybe [Filter]
-> Maybe [Tagger]
-> Maybe (Sort, Order)
-> Maybe DisplayMode
-> Maybe Bool
-> PhyloQueryView
toPhyloView' = initPhyloQueryView
toPhyloView :: PhyloQueryView -> Phylo -> PhyloView toPhyloView :: PhyloQueryView -> Phylo -> PhyloView
toPhyloView q p = processDisplay (q ^. qv_display) toPhyloView q p = processDisplay (q ^. qv_display)
$ processSort (q ^. qv_sort ) p $ processSort (q ^. qv_sort ) p
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment