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

[API] Search Author / Contact ok

parent 6e4e0dc7
...@@ -279,7 +279,6 @@ pairWith cId aId lId = do ...@@ -279,7 +279,6 @@ pairWith cId aId lId = do
_ <- insertNodeNode [ NodeNode cId aId Nothing Nothing] _ <- insertNodeNode [ NodeNode cId aId Nothing Nothing]
pure r pure r
------------------------------------------------------------------------
------------------------------------------------------------------------ ------------------------------------------------------------------------
type TreeAPI = QueryParams "type" NodeType :> Get '[JSON] (Tree NodeTree) type TreeAPI = QueryParams "type" NodeType :> Get '[JSON] (Tree NodeTree)
......
...@@ -21,7 +21,7 @@ module Gargantext.API.Search ...@@ -21,7 +21,7 @@ module Gargantext.API.Search
import Data.Aeson import Data.Aeson
import Data.Maybe (fromMaybe) import Data.Maybe (fromMaybe)
import Data.Swagger hiding (fieldLabelModifier) import Data.Swagger hiding (fieldLabelModifier, Contact)
import Data.Text (Text) import Data.Text (Text)
import Data.Time (UTCTime) import Data.Time (UTCTime)
import GHC.Generics (Generic) import GHC.Generics (Generic)
...@@ -30,14 +30,13 @@ import Gargantext.Core.Utils.Prefix (unPrefixSwagger, unCapitalize, dropPrefix) ...@@ -30,14 +30,13 @@ import Gargantext.Core.Utils.Prefix (unPrefixSwagger, unCapitalize, dropPrefix)
import Gargantext.Database.Query.Facet import Gargantext.Database.Query.Facet
import Gargantext.Database.Action.Search import Gargantext.Database.Action.Search
import Gargantext.Database.Action.Flow.Pairing (isPairedWith) import Gargantext.Database.Action.Flow.Pairing (isPairedWith)
import Gargantext.Database.Admin.Types.Hyperdata (HyperdataContact, HyperdataDocument(..)) import Gargantext.Database.Admin.Types.Hyperdata (HyperdataContact(..), HyperdataDocument(..), ContactWho(..))
import Gargantext.Database.Admin.Types.Node import Gargantext.Database.Admin.Types.Node
import Gargantext.Prelude import Gargantext.Prelude
import Servant import Servant
import Test.QuickCheck (elements) import Test.QuickCheck (elements)
import Test.QuickCheck.Arbitrary import Test.QuickCheck.Arbitrary
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- 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.
...@@ -52,11 +51,12 @@ api :: NodeId -> GargServer (API SearchResult) ...@@ -52,11 +51,12 @@ api :: NodeId -> GargServer (API SearchResult)
api nId (SearchQuery q SearchDoc) o l order = api nId (SearchQuery q SearchDoc) o l order =
SearchResult <$> SearchResultDoc <$> map toRow <$> searchInCorpus nId False q o l order SearchResult <$> SearchResultDoc <$> map toRow <$> searchInCorpus nId False q o l order
api nId (SearchQuery q SearchContact) o l order = do api nId (SearchQuery q SearchContact) o l order = do
aIds <- isPairedWith NodeAnnuaire nId printDebug "isPairedWith" nId
aIds <- isPairedWith nId NodeAnnuaire
-- TODO if paired with several corpus -- TODO if paired with several corpus
case head aIds of case head aIds of
Nothing -> pure $ SearchResult $ SearchNoResult "[G.A.Search] pair corpus with an Annuaire" Nothing -> pure $ SearchResult $ SearchNoResult "[G.A.Search] pair corpus with an Annuaire"
Just aId -> SearchResult <$> SearchResultContact <$> searchInCorpusWithContacts nId aId q o l order Just aId -> SearchResult <$> SearchResultContact <$> map toRow <$> searchInCorpusWithContacts nId aId q o l order
api _ _ _ _ _ = undefined api _ _ _ _ _ = undefined
----------------------------------------------------------------------- -----------------------------------------------------------------------
...@@ -104,7 +104,6 @@ instance Arbitrary SearchQuery where ...@@ -104,7 +104,6 @@ instance Arbitrary SearchQuery where
arbitrary = elements [SearchQuery ["electrodes"] SearchDoc] arbitrary = elements [SearchQuery ["electrodes"] SearchDoc]
-- arbitrary = elements [SearchQuery "electrodes" 1 ] --SearchDoc] -- arbitrary = elements [SearchQuery "electrodes" 1 ] --SearchDoc]
----------------------------------------------------------------------- -----------------------------------------------------------------------
data SearchResult = data SearchResult =
SearchResult { result :: !SearchResultTypes SearchResult { result :: !SearchResultTypes
} }
...@@ -130,7 +129,7 @@ instance Arbitrary SearchResult where ...@@ -130,7 +129,7 @@ instance Arbitrary SearchResult where
data SearchResultTypes = SearchResultDoc { docs :: ![Row]} data SearchResultTypes = SearchResultDoc { docs :: ![Row]}
| SearchResultContact { contacts :: ![FacetPaired Int UTCTime HyperdataContact Int] } | SearchResultContact { contacts :: ![Row] }
| SearchNoResult { message :: !Text } | SearchNoResult { message :: !Text }
deriving (Generic) deriving (Generic)
...@@ -164,16 +163,19 @@ data Row = ...@@ -164,16 +163,19 @@ data Row =
, category :: !Int , category :: !Int
, score :: !Int , score :: !Int
} }
| Contact { c_id :: !Int | Contact { c_id :: !Int
, c_created :: !Text , c_created :: !UTCTime
, c_hyperdata :: !HyperdataContact , c_hyperdata :: !HyperdataRow
, c_score :: !Int , c_score :: !Int
} }
deriving (Generic) deriving (Generic)
instance FromJSON Row instance FromJSON Row
where where
parseJSON = genericParseJSON (defaultOptions { sumEncoding = ObjectWithSingleField }) parseJSON = genericParseJSON
( defaultOptions { sumEncoding = ObjectWithSingleField
}
)
instance ToJSON Row instance ToJSON Row
where where
...@@ -185,11 +187,20 @@ instance Arbitrary Row where ...@@ -185,11 +187,20 @@ instance Arbitrary Row where
instance ToSchema Row where instance ToSchema Row where
declareNamedSchema = genericDeclareNamedSchema (unPrefixSwagger "") declareNamedSchema = genericDeclareNamedSchema (unPrefixSwagger "")
toRow :: FacetDoc -> Row class ToRow a where
toRow (FacetDoc nId utc t h mc md) = Document nId utc t (toHyperdataRow h) (fromMaybe 0 mc) (round $ fromMaybe 0 md) toRow :: a -> Row
-------------------------------------------------------------------- instance ToRow FacetDoc where
toRow (FacetDoc nId utc t h mc md) = Document nId utc t (toHyperdataRow h) (fromMaybe 0 mc) (round $ fromMaybe 0 md)
-- | TODO rename FacetPaired
type FacetContact = FacetPaired Int UTCTime HyperdataContact Int
instance ToRow FacetContact where
toRow (FacetPaired nId utc h s) = Contact nId utc (toHyperdataRow h) s
--------------------------------------------------------------------
data HyperdataRow = data HyperdataRow =
HyperdataRowDocument { _hr_bdd :: !Text HyperdataRowDocument { _hr_bdd :: !Text
, _hr_doi :: !Text , _hr_doi :: !Text
...@@ -211,7 +222,10 @@ data HyperdataRow = ...@@ -211,7 +222,10 @@ data HyperdataRow =
, _hr_publication_second :: !Int , _hr_publication_second :: !Int
, _hr_language_iso2 :: !Text , _hr_language_iso2 :: !Text
} }
| HyperdataRowContact { _hr_name :: !Text } | HyperdataRowContact { _hr_firstname :: !Text
, _hr_lastname :: !Text
, _hr_labs :: !Text
}
deriving (Generic) deriving (Generic)
instance FromJSON HyperdataRow instance FromJSON HyperdataRow
...@@ -240,26 +254,32 @@ instance Arbitrary HyperdataRow where ...@@ -240,26 +254,32 @@ instance Arbitrary HyperdataRow where
instance ToSchema HyperdataRow where instance ToSchema HyperdataRow where
declareNamedSchema = genericDeclareNamedSchema (unPrefixSwagger "_hr_") declareNamedSchema = genericDeclareNamedSchema (unPrefixSwagger "_hr_")
toHyperdataRow :: HyperdataDocument -> HyperdataRow class ToHyperdataRow a where
toHyperdataRow (HyperdataDocument b d u ui ub p t a i s abs pd py pm pda ph pmin psec l) = toHyperdataRow :: a -> HyperdataRow
HyperdataRowDocument
(fromMaybe "" b) instance ToHyperdataRow HyperdataDocument where
(fromMaybe "" d) toHyperdataRow (HyperdataDocument b d u ui ub p t a i s abs pd py pm pda ph pmin psec l) =
(fromMaybe "" u) HyperdataRowDocument
(fromMaybe "" ui) (fromMaybe "" b)
(fromMaybe "" ub) (fromMaybe "" d)
(fromMaybe 0 p) (fromMaybe "" u)
(fromMaybe "Title" t) (fromMaybe "" ui)
(fromMaybe "" a) (fromMaybe "" ub)
(fromMaybe "" i) (fromMaybe 0 p)
(fromMaybe "" s) (fromMaybe "Title" t)
(fromMaybe "" abs) (fromMaybe "" a)
(fromMaybe "" pd) (fromMaybe "" i)
(fromMaybe 2020 py) (fromMaybe "" s)
(fromMaybe 1 pm) (fromMaybe "" abs)
(fromMaybe 1 pda) (fromMaybe "" pd)
(fromMaybe 1 ph) (fromMaybe 2020 py)
(fromMaybe 1 pmin) (fromMaybe 1 pm)
(fromMaybe 1 psec) (fromMaybe 1 pda)
(fromMaybe "EN" l) (fromMaybe 1 ph)
(fromMaybe 1 pmin)
(fromMaybe 1 psec)
(fromMaybe "EN" l)
instance ToHyperdataRow HyperdataContact where
toHyperdataRow (HyperdataContact _ (Just (ContactWho _ fn ln _ _)) _ _ _ _ _ _ ) = HyperdataRowContact (fromMaybe "FN" fn) (fromMaybe "LN" ln) "Labs"
toHyperdataRow (HyperdataContact _ _ _ _ _ _ _ _ ) = HyperdataRowContact "FirstName" "LastName" "Labs"
...@@ -36,6 +36,7 @@ import Gargantext.Database.Query.Prelude (leftJoin2, returnA, queryNodeNodeTable ...@@ -36,6 +36,7 @@ import Gargantext.Database.Query.Prelude (leftJoin2, returnA, queryNodeNodeTable
import Gargantext.Database.Query.Table.Node.Children (getAllContacts) import Gargantext.Database.Query.Table.Node.Children (getAllContacts)
import Gargantext.Database.Query.Table.Node.Select (selectNodesWithUsername) import Gargantext.Database.Query.Table.Node.Select (selectNodesWithUsername)
import Gargantext.Database.Query.Table.Node (defaultList) import Gargantext.Database.Query.Table.Node (defaultList)
import Gargantext.Database.Query.Table.NodeNode (insertNodeNode)
import Gargantext.Database.Schema.Ngrams -- (NgramsType(..)) import Gargantext.Database.Schema.Ngrams -- (NgramsType(..))
import Gargantext.Database.Schema.Node import Gargantext.Database.Schema.Node
import Gargantext.Prelude hiding (sum) import Gargantext.Prelude hiding (sum)
...@@ -50,8 +51,8 @@ import qualified Data.Text as DT ...@@ -50,8 +51,8 @@ import qualified Data.Text as DT
-- | isPairedWith -- | isPairedWith
-- All NodeAnnuaire paired with a Corpus of NodeId nId: -- All NodeAnnuaire paired with a Corpus of NodeId nId:
-- isPairedWith NodeAnnuaire corpusId -- isPairedWith NodeAnnuaire corpusId
isPairedWith :: NodeType -> NodeId -> Cmd err [NodeId] isPairedWith :: NodeId -> NodeType -> Cmd err [NodeId]
isPairedWith nt nId = runOpaQuery (selectQuery nt nId) isPairedWith nId nt = runOpaQuery (selectQuery nt nId)
where where
selectQuery :: NodeType -> NodeId -> Query (Column PGInt4) selectQuery :: NodeType -> NodeId -> Query (Column PGInt4)
selectQuery nt' nId' = proc () -> do selectQuery nt' nId' = proc () -> do
...@@ -72,7 +73,9 @@ pairing a c l' = do ...@@ -72,7 +73,9 @@ pairing a c l' = do
Nothing -> defaultList c Nothing -> defaultList c
Just l'' -> pure l'' Just l'' -> pure l''
dataPaired <- dataPairing a (c,l,Authors) takeName takeName dataPaired <- dataPairing a (c,l,Authors) takeName takeName
insertDB $ prepareInsert dataPaired r <- insertDB $ prepareInsert dataPaired
_ <- insertNodeNode [ NodeNode c a Nothing Nothing]
pure r
dataPairing :: AnnuaireId dataPairing :: AnnuaireId
......
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