2 Module : Gargantext.API.Count
3 Description : Server API
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
10 Count API part of Gargantext.
13 {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
15 {-# LANGUAGE NoImplicitPrelude #-}
16 {-# LANGUAGE DataKinds #-}
17 {-# LANGUAGE TemplateHaskell #-}
18 {-# LANGUAGE TypeOperators #-}
19 {-# LANGUAGE DeriveGeneric #-}
20 {-# LANGUAGE DeriveAnyClass #-}
21 {-# LANGUAGE OverloadedStrings #-}
22 {-# LANGUAGE RankNTypes #-}
24 module Gargantext.API.Search
27 import GHC.Generics (Generic)
28 import Data.Time (UTCTime)
29 import Data.Aeson.TH (deriveJSON)
31 import Data.Text (Text)
33 import Test.QuickCheck.Arbitrary
34 import Test.QuickCheck (elements)
35 -- import Control.Applicative ((<*>))
36 import Gargantext.API.Types (GargServer)
37 import Gargantext.Prelude
38 import Gargantext.Core.Utils.Prefix (unPrefix)
39 import Gargantext.Database.Types.Node
40 import Gargantext.Database.TextSearch
41 import Gargantext.Database.Facet
43 -----------------------------------------------------------------------
44 data SearchQuery = SearchQuery
48 $(deriveJSON (unPrefix "sq_") ''SearchQuery)
50 instance ToSchema SearchQuery where
52 genericDeclareNamedSchema
53 defaultSchemaOptions {fieldLabelModifier = drop 3}
55 instance Arbitrary SearchQuery where
56 arbitrary = elements [SearchQuery ["electrodes"]]
58 -----------------------------------------------------------------------
59 data SearchDocResults = SearchDocResults { sdr_results :: [FacetDoc]}
61 $(deriveJSON (unPrefix "sdr_") ''SearchDocResults)
63 instance Arbitrary SearchDocResults where
64 arbitrary = SearchDocResults <$> arbitrary
66 instance ToSchema SearchDocResults where
68 genericDeclareNamedSchema
69 defaultSchemaOptions {fieldLabelModifier = drop 4}
71 data SearchPairedResults = SearchPairedResults { spr_results :: [FacetPaired Int UTCTime HyperdataDocument Int [Pair Int Text]] }
73 $(deriveJSON (unPrefix "spr_") ''SearchPairedResults)
75 instance Arbitrary SearchPairedResults where
76 arbitrary = SearchPairedResults <$> arbitrary
78 instance ToSchema SearchPairedResults where
80 genericDeclareNamedSchema
81 defaultSchemaOptions {fieldLabelModifier = \fieldLabel -> drop 4 fieldLabel}
83 -----------------------------------------------------------------------
84 -- TODO-ACCESS: CanSearch? or is it part of CanGetNode
85 -- TODO-EVENTS: No event, this is a read-only query.
86 type SearchAPI results
87 = Summary "Search endpoint"
88 :> ReqBody '[JSON] SearchQuery
89 :> QueryParam "offset" Int
90 :> QueryParam "limit" Int
91 :> QueryParam "order" OrderBy
92 :> Post '[JSON] results
94 type SearchDocsAPI = SearchAPI SearchDocResults
95 type SearchPairsAPI = SearchAPI SearchPairedResults
96 -----------------------------------------------------------------------
98 searchPairs :: NodeId -> GargServer SearchPairsAPI
99 searchPairs pId (SearchQuery q) o l order =
100 SearchPairedResults <$> searchInCorpusWithContacts pId q o l order
102 searchDocs :: NodeId -> GargServer SearchDocsAPI
103 searchDocs nId (SearchQuery q) o l order =
104 SearchDocResults <$> searchInCorpus nId q o l order
105 --SearchResults <$> searchInCorpusWithContacts nId q o l order