Update the search API

parent 5f31a345
Pipeline #497 failed with stage
...@@ -73,11 +73,10 @@ import Gargantext.API.Count ( CountAPI, count, Query) ...@@ -73,11 +73,10 @@ import Gargantext.API.Count ( CountAPI, count, Query)
import Gargantext.API.FrontEnd (FrontEndAPI, frontEndServer) import Gargantext.API.FrontEnd (FrontEndAPI, frontEndServer)
import Gargantext.API.Ngrams (HasRepo(..), HasRepoSaver(..), saveRepo, TableNgramsApi, apiNgramsTableDoc) import Gargantext.API.Ngrams (HasRepo(..), HasRepoSaver(..), saveRepo, TableNgramsApi, apiNgramsTableDoc)
import Gargantext.API.Node import Gargantext.API.Node
import Gargantext.API.Search ( SearchAPI, search, SearchQuery) import Gargantext.API.Search (SearchPairsAPI, searchPairs)
import Gargantext.API.Types import Gargantext.API.Types
import qualified Gargantext.API.Corpus.New as New import qualified Gargantext.API.Corpus.New as New
import Gargantext.Core.Types (HasInvalidError(..)) import Gargantext.Core.Types (HasInvalidError(..))
import Gargantext.Database.Facet
import Gargantext.Database.Schema.Node (HasNodeError(..), NodeError) import Gargantext.Database.Schema.Node (HasNodeError(..), NodeError)
import Gargantext.Database.Tree (HasTreeError(..), TreeError) import Gargantext.Database.Tree (HasTreeError(..), TreeError)
import Gargantext.Database.Types.Node import Gargantext.Database.Types.Node
...@@ -263,12 +262,7 @@ type GargAPI' = ...@@ -263,12 +262,7 @@ type GargAPI' =
:> ReqBody '[JSON] Query :> CountAPI :> ReqBody '[JSON] Query :> CountAPI
-- Corpus endpoint --> TODO rename s/search/filter/g -- Corpus endpoint --> TODO rename s/search/filter/g
:<|> "search":> Summary "Search endpoint" :<|> "search":> Capture "corpus" NodeId :> SearchPairsAPI
:> ReqBody '[JSON] SearchQuery
:> QueryParam "offset" Int
:> QueryParam "limit" Int
:> QueryParam "order" OrderBy
:> SearchAPI
-- TODO move to NodeAPI? -- TODO move to NodeAPI?
:<|> "graph" :> Summary "Graph endpoint" :<|> "graph" :> Summary "Graph endpoint"
...@@ -320,7 +314,7 @@ serverGargAPI -- orchestrator ...@@ -320,7 +314,7 @@ serverGargAPI -- orchestrator
:<|> apiNgramsTableDoc :<|> apiNgramsTableDoc
:<|> nodesAPI :<|> nodesAPI
:<|> count -- TODO: undefined :<|> count -- TODO: undefined
:<|> search :<|> searchPairs -- TODO: move elsewhere
:<|> graphAPI -- TODO: mock :<|> graphAPI -- TODO: mock
:<|> treeAPI :<|> treeAPI
:<|> New.api :<|> New.api
......
...@@ -51,7 +51,7 @@ import GHC.Generics (Generic) ...@@ -51,7 +51,7 @@ import GHC.Generics (Generic)
import Gargantext.API.Metrics import Gargantext.API.Metrics
import Gargantext.API.Ngrams (TabType(..), TableNgramsApi, apiNgramsTableCorpus, QueryParamR, TODO) import Gargantext.API.Ngrams (TabType(..), TableNgramsApi, apiNgramsTableCorpus, QueryParamR, TODO)
import Gargantext.API.Ngrams.NTree (MyTree) import Gargantext.API.Ngrams.NTree (MyTree)
import Gargantext.API.Search ( SearchAPI, searchIn, SearchInQuery) import Gargantext.API.Search (SearchDocsAPI, searchDocs)
import Gargantext.API.Types import Gargantext.API.Types
import Gargantext.Core.Types (Offset, Limit) import Gargantext.Core.Types (Offset, Limit)
import Gargantext.Core.Types.Main (Tree, NodeTree, ListType) import Gargantext.Core.Types.Main (Tree, NodeTree, ListType)
...@@ -130,15 +130,10 @@ type NodeAPI a = Get '[JSON] (Node a) ...@@ -130,15 +130,10 @@ type NodeAPI a = Get '[JSON] (Node a)
:<|> "table" :> TableApi :<|> "table" :> TableApi
:<|> "ngrams" :> TableNgramsApi :<|> "ngrams" :> TableNgramsApi
:<|> "pairing" :> PairingApi :<|> "pairing" :> PairingApi
:<|> "favorites" :> FavApi :<|> "favorites" :> FavApi
:<|> "documents" :> DocsApi :<|> "documents" :> DocsApi
:<|> "search":> Summary "Node Search" :<|> "search" :> SearchDocsAPI
:> ReqBody '[JSON] SearchInQuery
:> QueryParam "offset" Int
:> QueryParam "limit" Int
:> QueryParam "order" OrderBy
:> SearchAPI
-- VIZ -- VIZ
:<|> "metrics" :> ScatterAPI :<|> "metrics" :> ScatterAPI
...@@ -182,8 +177,7 @@ nodeAPI p uId id ...@@ -182,8 +177,7 @@ nodeAPI p uId id
:<|> favApi id :<|> favApi id
:<|> delDocs id :<|> delDocs id
:<|> searchIn id :<|> searchDocs id
:<|> getScatter id :<|> getScatter id
:<|> getChart id :<|> getChart id
:<|> getPie id :<|> getPie id
......
...@@ -33,54 +33,50 @@ import Servant ...@@ -33,54 +33,50 @@ import Servant
import Test.QuickCheck.Arbitrary import Test.QuickCheck.Arbitrary
import Test.QuickCheck (elements) import Test.QuickCheck (elements)
-- import Control.Applicative ((<*>)) -- import Control.Applicative ((<*>))
import Gargantext.API.Types (GargServer)
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Core.Utils.Prefix (unPrefix) import Gargantext.Core.Utils.Prefix (unPrefix)
import Gargantext.Core.Types.Main (Offset, Limit)
import Gargantext.Database.Types.Node import Gargantext.Database.Types.Node
import Gargantext.Database.TextSearch import Gargantext.Database.TextSearch
import Gargantext.Database.Facet import Gargantext.Database.Facet
import Gargantext.Database.Utils (Cmd)
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- | SearchIn [NodesId] if empty then global search data SearchQuery = SearchQuery
-- TODO [Int] { sq_query :: [Text]
data SearchQuery = SearchQuery { sq_query :: [Text] } deriving (Generic)
, sq_corpus_id :: NodeId
} deriving (Generic)
$(deriveJSON (unPrefix "sq_") ''SearchQuery) $(deriveJSON (unPrefix "sq_") ''SearchQuery)
instance ToSchema SearchQuery where instance ToSchema SearchQuery where
declareNamedSchema = declareNamedSchema =
genericDeclareNamedSchema genericDeclareNamedSchema
defaultSchemaOptions {fieldLabelModifier = \fieldLabel -> drop 3 fieldLabel} defaultSchemaOptions {fieldLabelModifier = drop 3}
instance Arbitrary SearchQuery where instance Arbitrary SearchQuery where
arbitrary = elements [SearchQuery ["electrodes"] 472764] arbitrary = elements [SearchQuery ["electrodes"]]
--
data SearchInQuery = SearchInQuery { siq_query :: [Text] -----------------------------------------------------------------------
} deriving (Generic)
$(deriveJSON (unPrefix "siq_") ''SearchInQuery)
instance ToSchema SearchInQuery where
declareNamedSchema =
genericDeclareNamedSchema
defaultSchemaOptions {fieldLabelModifier = \fieldLabel -> drop 4 fieldLabel}
instance Arbitrary SearchInQuery where data SearchDocResults = SearchDocResults { sdr_results :: [FacetDoc]}
arbitrary = SearchInQuery <$> arbitrary deriving (Generic)
$(deriveJSON (unPrefix "sdr_") ''SearchDocResults)
instance Arbitrary SearchDocResults where
arbitrary = SearchDocResults <$> arbitrary
----------------------------------------------------------------------- instance ToSchema SearchDocResults where
declareNamedSchema =
genericDeclareNamedSchema
defaultSchemaOptions {fieldLabelModifier = drop 4}
data SearchResults = SearchResults' { srs_resultsP :: [FacetDoc]} data SearchPairedResults = SearchPairedResults { spr_results :: [FacetPaired Int UTCTime HyperdataDocument Int [Pair Int Text]] }
| SearchResults { srs_results :: [FacetPaired Int UTCTime HyperdataDocument Int [Pair Int Text]]}
deriving (Generic) deriving (Generic)
$(deriveJSON (unPrefix "srs_") ''SearchResults) $(deriveJSON (unPrefix "spr_") ''SearchPairedResults)
instance Arbitrary SearchResults where instance Arbitrary SearchPairedResults where
arbitrary = SearchResults <$> arbitrary arbitrary = SearchPairedResults <$> arbitrary
instance ToSchema SearchResults where instance ToSchema SearchPairedResults where
declareNamedSchema = declareNamedSchema =
genericDeclareNamedSchema genericDeclareNamedSchema
defaultSchemaOptions {fieldLabelModifier = \fieldLabel -> drop 4 fieldLabel} defaultSchemaOptions {fieldLabelModifier = \fieldLabel -> drop 4 fieldLabel}
...@@ -88,16 +84,25 @@ instance ToSchema SearchResults where ...@@ -88,16 +84,25 @@ instance ToSchema SearchResults where
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- TODO-ACCESS: CanSearch? or is it part of CanGetNode -- TODO-ACCESS: CanSearch? or is it part of CanGetNode
-- TODO-EVENTS: No event, this is a read-only query. -- TODO-EVENTS: No event, this is a read-only query.
type SearchAPI = Post '[JSON] SearchResults type SearchAPI results
= Summary "Search endpoint"
:> ReqBody '[JSON] SearchQuery
:> QueryParam "offset" Int
:> QueryParam "limit" Int
:> QueryParam "order" OrderBy
:> Post '[JSON] results
type SearchDocsAPI = SearchAPI SearchDocResults
type SearchPairsAPI = SearchAPI SearchPairedResults
----------------------------------------------------------------------- -----------------------------------------------------------------------
search :: SearchQuery -> Maybe Offset -> Maybe Limit -> Maybe OrderBy -> Cmd err SearchResults searchPairs :: NodeId -> GargServer SearchPairsAPI
search (SearchQuery q pId) o l order = searchPairs pId (SearchQuery q) o l order =
SearchResults <$> searchInCorpusWithContacts pId q o l order SearchPairedResults <$> searchInCorpusWithContacts pId q o l order
searchIn :: NodeId -> SearchInQuery -> Maybe Offset -> Maybe Limit -> Maybe OrderBy -> Cmd err SearchResults searchDocs :: NodeId -> GargServer SearchDocsAPI
searchIn nId (SearchInQuery q ) o l order = searchDocs nId (SearchQuery q) o l order =
SearchResults' <$> searchInCorpus nId q o l order SearchDocResults <$> searchInCorpus nId q o l order
--SearchResults <$> searchInCorpusWithContacts nId q o l order --SearchResults <$> searchInCorpusWithContacts nId q o l order
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