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 FlexibleContexts #-}
16 {-# LANGUAGE NoImplicitPrelude #-}
17 {-# LANGUAGE DataKinds #-}
18 {-# LANGUAGE TemplateHaskell #-}
19 {-# LANGUAGE TypeOperators #-}
20 {-# LANGUAGE DeriveGeneric #-}
21 {-# LANGUAGE DeriveAnyClass #-}
22 {-# LANGUAGE OverloadedStrings #-}
23 {-# LANGUAGE RankNTypes #-}
25 module Gargantext.API.Search
28 import GHC.Generics (Generic)
29 import Data.Time (UTCTime)
30 import Data.Aeson.TH (deriveJSON)
32 import Data.Text (Text)
34 import Test.QuickCheck.Arbitrary
35 import Test.QuickCheck (elements)
36 -- import Control.Applicative ((<*>))
37 import Gargantext.API.Types (GargServer)
38 import Gargantext.Prelude
39 import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger)
40 import Gargantext.Database.Types.Node
41 import Gargantext.Database.TextSearch
42 import Gargantext.Database.Facet
44 -----------------------------------------------------------------------
45 data SearchQuery = SearchQuery
49 $(deriveJSON (unPrefix "sq_") ''SearchQuery)
51 instance ToSchema SearchQuery where
52 declareNamedSchema = genericDeclareNamedSchema (unPrefixSwagger "sq_")
54 instance Arbitrary SearchQuery where
55 arbitrary = elements [SearchQuery ["electrodes"]]
57 -----------------------------------------------------------------------
58 data SearchDocResults = SearchDocResults { sdr_results :: [FacetDoc]}
60 $(deriveJSON (unPrefix "sdr_") ''SearchDocResults)
62 instance Arbitrary SearchDocResults where
63 arbitrary = SearchDocResults <$> arbitrary
65 instance ToSchema SearchDocResults where
66 declareNamedSchema = genericDeclareNamedSchema (unPrefixSwagger "sdr_")
68 data SearchPairedResults = SearchPairedResults { spr_results :: [FacetPaired Int UTCTime HyperdataDocument Int [Pair Int Text]] }
70 $(deriveJSON (unPrefix "spr_") ''SearchPairedResults)
72 instance Arbitrary SearchPairedResults where
73 arbitrary = SearchPairedResults <$> arbitrary
75 instance ToSchema SearchPairedResults where
76 declareNamedSchema = genericDeclareNamedSchema (unPrefixSwagger "spr_")
78 -----------------------------------------------------------------------
79 -- TODO-ACCESS: CanSearch? or is it part of CanGetNode
80 -- TODO-EVENTS: No event, this is a read-only query.
81 type SearchAPI results
82 = Summary "Search endpoint"
83 :> ReqBody '[JSON] SearchQuery
84 :> QueryParam "offset" Int
85 :> QueryParam "limit" Int
86 :> QueryParam "order" OrderBy
87 :> Post '[JSON] results
89 type SearchDocsAPI = SearchAPI SearchDocResults
90 type SearchPairsAPI = SearchAPI SearchPairedResults
91 -----------------------------------------------------------------------
93 searchPairs :: NodeId -> GargServer SearchPairsAPI
94 searchPairs pId (SearchQuery q) o l order =
95 SearchPairedResults <$> searchInCorpusWithContacts pId q o l order
97 searchDocs :: NodeId -> GargServer SearchDocsAPI
98 searchDocs nId (SearchQuery q) o l order =
99 SearchDocResults <$> searchInCorpus nId False q o l order
100 --SearchResults <$> searchInCorpusWithContacts nId q o l order