2 Module : Gargantext.API.Node
3 Description : Server API
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
11 -- TODO-ACCESS: CanGetNode
12 -- TODO-EVENTS: No events as this is a read only query.
15 -------------------------------------------------------------------
16 -- TODO-ACCESS: access by admin only.
17 -- At first let's just have an isAdmin check.
18 -- Later: check userId CanDeleteNodes Nothing
19 -- TODO-EVENTS: DeletedNodes [NodeId]
20 -- {"tag": "DeletedNodes", "nodes": [Int*]}
25 {-# OPTIONS_GHC -fno-warn-orphans #-}
27 {-# LANGUAGE DataKinds #-}
28 {-# LANGUAGE DeriveGeneric #-}
29 {-# LANGUAGE FlexibleContexts #-}
30 {-# LANGUAGE FlexibleInstances #-}
31 {-# LANGUAGE NoImplicitPrelude #-}
32 {-# LANGUAGE OverloadedStrings #-}
33 {-# LANGUAGE RankNTypes #-}
34 {-# LANGUAGE ScopedTypeVariables #-}
35 {-# LANGUAGE TemplateHaskell #-}
36 {-# LANGUAGE TypeOperators #-}
38 module Gargantext.API.Table
41 import Data.Aeson.TH (deriveJSON)
44 import Data.Text (Text())
45 import GHC.Generics (Generic)
46 import Gargantext.API.Ngrams (TabType(..))
47 import Gargantext.Core.Types (Offset, Limit)
48 import Gargantext.Core.Utils.Prefix (unPrefix)
49 import Gargantext.Database.Facet (FacetDoc , runViewDocuments, OrderBy(..),runViewAuthorsDoc)
50 import Gargantext.Database.Learn (FavOrTrash(..), moreLike)
51 import Gargantext.Database.TextSearch
52 import Gargantext.Database.Types.Node
53 import Gargantext.Database.Utils -- (Cmd, CmdM)
54 import Gargantext.Prelude
56 import Test.QuickCheck (elements)
57 import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
59 ------------------------------------------------------------------------
60 type TableApi = Summary " Table API"
61 :> ReqBody '[JSON] TableQuery
62 :> Post '[JSON] [FacetDoc]
65 data TableQuery = TableQuery
66 { tq_offset :: Maybe Int
67 , tq_limit :: Maybe Int
68 , tq_orderBy :: Maybe OrderBy
69 , tq_tabType :: Maybe TabType
70 , tq_mQuery :: Maybe Text
73 $(deriveJSON (unPrefix "tq_") ''TableQuery)
75 instance ToSchema TableQuery where
77 genericDeclareNamedSchema
78 defaultSchemaOptions {fieldLabelModifier = drop 3}
80 instance Arbitrary TableQuery where
81 arbitrary = elements [TableQuery (Just 0) (Just 10) Nothing (Just Docs) (Just "electrodes")]
84 tableApi :: NodeId -> TableQuery -> Cmd err [FacetDoc]
85 tableApi cId (TableQuery o l order ft Nothing) = getTable cId ft o l order
86 tableApi cId (TableQuery o l order ft (Just q)) = case ft of
87 Just Docs -> searchInCorpus cId [q] o l order
88 Just Trash -> panic "TODO search in Trash" -- TODO searchInCorpus cId q o l order
89 _ -> panic "not implemented: search in Fav/Trash/*"
91 getTable :: NodeId -> Maybe TabType
92 -> Maybe Offset -> Maybe Limit
93 -> Maybe OrderBy -> Cmd err [FacetDoc]
94 getTable cId ft o l order =
96 (Just Docs) -> runViewDocuments cId False o l order
97 (Just Trash) -> runViewDocuments cId True o l order
98 (Just MoreFav) -> moreLike cId o l order IsFav
99 (Just MoreTrash) -> moreLike cId o l order IsTrash
100 _ -> panic "not implemented"
102 getPairing :: ContactId -> Maybe TabType
103 -> Maybe Offset -> Maybe Limit
104 -> Maybe OrderBy -> Cmd err [FacetDoc]
105 getPairing cId ft o l order =
107 (Just Docs) -> runViewAuthorsDoc cId False o l order
108 (Just Trash) -> runViewAuthorsDoc cId True o l order
109 _ -> panic "not implemented"