1 {-# LANGUAGE TemplateHaskell #-}
3 module Gargantext.API.Node.Corpus.Types where
5 import Control.Lens hiding (elements, Empty)
6 import Control.Monad.Fail (fail)
7 import Control.Monad.Reader (MonadReader)
9 import Data.Aeson.TH (deriveJSON)
10 import Data.Monoid (mempty)
12 import GHC.Generics (Generic)
13 import Test.QuickCheck
14 import qualified Data.Text as T
15 import qualified PUBMED.Types as PUBMED
17 import Gargantext.Prelude
19 import qualified Gargantext.API.Admin.Orchestrator.Types as Types
20 import Gargantext.Core.Utils.Prefix (unPrefix)
21 import Gargantext.Database.Action.Flow (DataOrigin(..))
22 import Gargantext.Database.Prelude (HasConfig(..))
25 | PubMed { _api_key :: Maybe PUBMED.APIKey }
30 deriving (Eq, Show, Generic)
32 instance Arbitrary Database
34 arbitrary = elements [ Empty
35 , PubMed { _api_key = Nothing }
42 deriveJSON (unPrefix "") ''Database
43 instance ToSchema Database where
44 declareNamedSchema = genericDeclareNamedSchemaUnrestricted defaultSchemaOptions
46 database2origin :: ( MonadReader env m
47 , HasConfig env ) => Database -> m DataOrigin
48 database2origin Empty = pure $ InternalOrigin Types.IsTex
49 database2origin (PubMed { _api_key }) = do
50 -- pubmed_api_key <- view $ hasConfig . gc_pubmed_api_key
52 pure $ ExternalOrigin $ Types.PubMed { mAPIKey = _api_key }
53 database2origin Arxiv = pure $ ExternalOrigin Types.Arxiv
54 database2origin HAL = pure $ ExternalOrigin Types.HAL
55 database2origin IsTex = pure $ ExternalOrigin Types.IsTex
56 database2origin Isidore = pure $ ExternalOrigin Types.Isidore
58 ------------------------------------------------------------------------
59 data Datafield = Gargantext
63 deriving (Eq, Show, Generic)
65 instance FromJSON Datafield where
66 parseJSON = withText "Datafield" $ \text ->
74 v -> case T.breakOnEnd " " v of
76 -> External <$> parseJSON (String dbName)
77 _ -> fail $ "Cannot match patterh 'External <db>' for string " <> T.unpack v
79 instance ToJSON Datafield where
80 toJSON (External db) = toJSON $ "External " <> show db
81 toJSON s = toJSON $ show s
83 instance Arbitrary Datafield where
84 arbitrary = oneof [pure Gargantext, pure Web, pure Files, External <$> arbitrary]
86 instance ToSchema Datafield where
87 declareNamedSchema _ = do
88 return $ NamedSchema (Just "Datafield") $ mempty
89 & type_ ?~ SwaggerObject