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 Data.Text (Text)
13 import qualified Data.Text as T
14 import GHC.Generics (Generic)
15 import Text.Regex.TDFA ((=~))
17 import Protolude ((++))
18 import Gargantext.Prelude
20 import qualified Gargantext.API.Admin.Orchestrator.Types as Types
21 import Gargantext.Core.Utils.Prefix (unPrefix)
22 import Gargantext.Database.Action.Flow (DataOrigin(..))
30 deriving (Eq, Show, Generic, Enum, Bounded)
32 deriveJSON (unPrefix "") ''Database
33 instance ToSchema Database
35 database2origin :: Database -> DataOrigin
36 database2origin Empty = InternalOrigin Types.IsTex
37 database2origin PubMed = ExternalOrigin Types.PubMed
38 database2origin Arxiv = ExternalOrigin Types.Arxiv
39 database2origin HAL = ExternalOrigin Types.HAL
40 database2origin IsTex = ExternalOrigin Types.IsTex
41 database2origin Isidore = ExternalOrigin Types.Isidore
43 ------------------------------------------------------------------------
44 data Datafield = Gargantext
45 | External (Maybe Database)
48 deriving (Eq, Show, Generic)
50 instance FromJSON Datafield where
51 parseJSON = withText "Datafield" $ \text ->
53 "Gargantext" -> pure Gargantext
57 let (preExternal, _, postExternal) = v =~ ("External " :: Text) :: (Text, Text, Text)
59 if preExternal == "" then do
60 db <- parseJSON $ String postExternal
62 else fail $ "Cannot match patterh 'External <db>' for string " ++ (T.unpack v)
63 instance ToJSON Datafield where
64 toJSON (External db) = toJSON $ "External " ++ (show db)
65 toJSON s = toJSON $ show s
66 instance ToSchema Datafield where
67 declareNamedSchema _ = do
68 return $ NamedSchema (Just "Datafield") $ mempty
69 & type_ ?~ SwaggerObject