1 {-# LANGUAGE TemplateHaskell #-}
3 module Gargantext.API.Node.Corpus.Types where
5 import Control.Lens hiding (elements, Empty)
6 import Control.Monad.Fail (fail)
8 import Data.Aeson.TH (deriveJSON)
9 import Data.Monoid (mempty)
11 import Data.Text (Text)
12 import qualified Data.Text as T
13 import GHC.Generics (Generic)
14 import Text.Regex.TDFA ((=~))
16 import Protolude ((++))
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(..))
29 deriving (Eq, Show, Generic, Enum, Bounded)
31 deriveJSON (unPrefix "") ''Database
32 instance ToSchema Database
34 database2origin :: Database -> DataOrigin
35 database2origin Empty = InternalOrigin Types.IsTex
36 database2origin PubMed = ExternalOrigin Types.PubMed
37 database2origin Arxiv = ExternalOrigin Types.Arxiv
38 database2origin HAL = ExternalOrigin Types.HAL
39 database2origin IsTex = ExternalOrigin Types.IsTex
40 database2origin Isidore = ExternalOrigin Types.Isidore
42 ------------------------------------------------------------------------
43 data Datafield = Gargantext
44 | External (Maybe Database)
47 deriving (Eq, Show, Generic)
49 instance FromJSON Datafield where
50 parseJSON = withText "Datafield" $ \text ->
52 "Gargantext" -> pure Gargantext
56 let (preExternal, _, postExternal) = v =~ ("External " :: Text) :: (Text, Text, Text)
58 if preExternal == "" then do
59 db <- parseJSON $ String postExternal
61 else fail $ "Cannot match patterh 'External <db>' for string " ++ (T.unpack v)
62 instance ToJSON Datafield where
63 toJSON (External db) = toJSON $ "External " ++ (show db)
64 toJSON s = toJSON $ show s
65 instance ToSchema Datafield where
66 declareNamedSchema _ = do
67 return $ NamedSchema (Just "Datafield") $ mempty
68 & type_ ?~ SwaggerObject