2 Module : Gargantext.Database.Admin.Types.Hyperdata.User
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 {-# LANGUAGE FunctionalDependencies #-}
13 {-# LANGUAGE DeriveGeneric #-}
14 {-# LANGUAGE DeriveAnyClass #-}
15 {-# LANGUAGE FlexibleContexts #-}
16 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
17 {-# LANGUAGE MultiParamTypeClasses #-}
18 {-# LANGUAGE NoImplicitPrelude #-}
19 {-# LANGUAGE OverloadedStrings #-}
20 {-# LANGUAGE RankNTypes #-}
21 {-# LANGUAGE TemplateHaskell #-}
24 module Gargantext.Database.Admin.Types.Hyperdata.User
27 import Data.Morpheus.Types (GQLType(..), typeDirective)
28 import qualified Gargantext.API.GraphQL.Utils as GAGU
29 import Gargantext.Core (Lang(..))
30 import Gargantext.Database.Admin.Types.Hyperdata.Prelude
31 import Gargantext.Database.Admin.Types.Hyperdata.Contact
32 import Gargantext.Database.Admin.Types.Node (DocumentId)
33 import Gargantext.Prelude
34 import qualified PUBMED.Types as PUBMED
36 -- import Gargantext.Database.Schema.Node -- (Node(..))
39 HyperdataUser { _hu_private :: !(Maybe HyperdataPrivate)
40 , _hu_shared :: !(Maybe HyperdataContact)
41 , _hu_public :: !(Maybe HyperdataPublic)
42 , _hu_pubmed_api_key :: !(Maybe PUBMED.APIKey)
43 } deriving (Eq, Show, Generic)
45 instance GQLType HyperdataUser where
46 directives _ = typeDirective (GAGU.RemovePrefix "_hu_")
48 data HyperdataPrivate =
49 HyperdataPrivate { _hpr_password :: !Text
52 deriving (Eq, Show, Generic)
54 instance GQLType HyperdataPrivate where
55 directives _ = typeDirective (GAGU.RemovePrefix "_hpr_")
58 data HyperdataPublic =
59 HyperdataPublic { _hpu_pseudo :: !Text
60 , _hpu_publications :: ![DocumentId]
62 deriving (Eq, Show, Generic)
64 instance GQLType HyperdataPublic where
65 directives _ = typeDirective (GAGU.RemovePrefix "_hpu_")
68 defaultHyperdataUser :: HyperdataUser
69 defaultHyperdataUser =
71 { _hu_private = Just defaultHyperdataPrivate
72 , _hu_shared = Just defaultHyperdataContact
73 , _hu_public = Just defaultHyperdataPublic
74 , _hu_pubmed_api_key = Nothing }
76 defaultHyperdataPublic :: HyperdataPublic
77 defaultHyperdataPublic = HyperdataPublic "pseudo" [1..10]
79 defaultHyperdataPrivate :: HyperdataPrivate
80 defaultHyperdataPrivate = HyperdataPrivate "password" EN
83 ------------------------------------------------------------------------
85 ------------------------------------------------------------------------
86 -- | Specific Gargantext instance
87 instance Hyperdata HyperdataUser
88 instance Hyperdata HyperdataPrivate
89 instance Hyperdata HyperdataPublic
92 makeLenses ''HyperdataUser
93 makeLenses ''HyperdataPrivate
94 makeLenses ''HyperdataPublic
96 -- | All Json instances
97 $(deriveJSON (unPrefix "_hu_") ''HyperdataUser)
98 $(deriveJSON (unPrefix "_hpr_") ''HyperdataPrivate)
99 $(deriveJSON (unPrefix "_hpu_") ''HyperdataPublic)
101 -- | Arbitrary instances
102 instance Arbitrary HyperdataUser where
103 arbitrary = HyperdataUser <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
105 instance Arbitrary HyperdataPrivate where
106 arbitrary = pure defaultHyperdataPrivate
108 instance Arbitrary HyperdataPublic where
109 arbitrary = pure defaultHyperdataPublic
111 -- | ToSchema instances
112 instance ToSchema HyperdataUser where
113 declareNamedSchema proxy =
114 genericDeclareNamedSchema (unPrefixSwagger "_hu_") proxy
115 & mapped.schema.description ?~ "User Hyperdata"
116 & mapped.schema.example ?~ toJSON defaultHyperdataUser
118 instance ToSchema HyperdataPrivate where
119 declareNamedSchema proxy =
120 genericDeclareNamedSchema (unPrefixSwagger "_hpr_") proxy
121 & mapped.schema.description ?~ "User Private Hyperdata"
122 & mapped.schema.example ?~ toJSON defaultHyperdataPrivate
125 instance ToSchema HyperdataPublic where
126 declareNamedSchema proxy =
127 genericDeclareNamedSchema (unPrefixSwagger "_hpu_") proxy
128 & mapped.schema.description ?~ "User Public Hyperdata"
129 & mapped.schema.example ?~ toJSON defaultHyperdataPublic
132 -- | Database (Posgresql-simple instance)
133 instance FromField HyperdataUser where
134 fromField = fromField'
135 instance FromField HyperdataPrivate where
136 fromField = fromField'
137 instance FromField HyperdataPublic where
138 fromField = fromField'
140 -- | Database (Opaleye instance)
141 instance DefaultFromField SqlJsonb HyperdataUser where
142 defaultFromField = fromPGSFromField
144 instance DefaultFromField SqlJsonb HyperdataPrivate where
145 defaultFromField = fromPGSFromField
147 instance DefaultFromField SqlJsonb HyperdataPublic where
148 defaultFromField = fromPGSFromField