]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/API/Node/Corpus/Types.hs
Revert "Merge remote-tracking branch 'origin/201-dev-user-pubmed-api-key' into dev"
[gargantext.git] / src / Gargantext / API / Node / Corpus / Types.hs
1 {-# LANGUAGE TemplateHaskell #-}
2
3 module Gargantext.API.Node.Corpus.Types where
4
5 import Control.Lens hiding (elements, Empty)
6 import Control.Monad.Fail (fail)
7 import Control.Monad.Reader (MonadReader)
8 import Data.Aeson
9 import Data.Aeson.TH (deriveJSON)
10 import Data.Monoid (mempty)
11 import Data.Swagger
12 import Data.Text (Text)
13 import qualified Data.Text as T
14 import GHC.Generics (Generic)
15 import Text.Regex.TDFA ((=~))
16
17 import Protolude ((++))
18 import Gargantext.Prelude
19
20 import qualified Gargantext.API.Admin.Orchestrator.Types as Types
21 import Gargantext.Core.Utils.Prefix (unPrefix)
22 import Gargantext.Database.Action.Flow (DataOrigin(..))
23
24 data Database = Empty
25 | PubMed
26 | Arxiv
27 | HAL
28 | IsTex
29 | Isidore
30 deriving (Eq, Show, Generic, Enum, Bounded)
31
32 deriveJSON (unPrefix "") ''Database
33 instance ToSchema Database
34
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
42
43 ------------------------------------------------------------------------
44 data Datafield = Gargantext
45 | External (Maybe Database)
46 | Web
47 | Files
48 deriving (Eq, Show, Generic)
49
50 instance FromJSON Datafield where
51 parseJSON = withText "Datafield" $ \text ->
52 case text of
53 "Gargantext" -> pure Gargantext
54 "Web" -> pure Web
55 "Files" -> pure Files
56 v ->
57 let (preExternal, _, postExternal) = v =~ ("External " :: Text) :: (Text, Text, Text)
58 in
59 if preExternal == "" then do
60 db <- parseJSON $ String postExternal
61 pure $ External db
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