2 Module : Gargantext.Database.Node.Contact
3 Description : Update Node in Database (Postgres)
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 {-# LANGUAGE DeriveGeneric #-}
13 {-# LANGUAGE NoImplicitPrelude #-}
14 {-# LANGUAGE FunctionalDependencies #-}
15 {-# LANGUAGE OverloadedStrings #-}
16 {-# LANGUAGE FlexibleInstances #-}
17 {-# LANGUAGE MultiParamTypeClasses #-}
18 {-# LANGUAGE TemplateHaskell #-}
20 module Gargantext.Database.Node.Contact
23 import Control.Lens (makeLenses)
24 import Data.Aeson.TH (deriveJSON)
25 import Data.Text (Text)
26 import Data.Time (UTCTime)
27 import Database.PostgreSQL.Simple.FromField (FromField, fromField)
28 import GHC.Generics (Generic)
29 import Gargantext.Core.Utils.Prefix (unPrefix)
30 import Gargantext.Database.Node (NodeWrite', AnnuaireId, UserId, Name, node)
31 import Gargantext.Database.Types.Node (Node,Hyperdata,NodeType(..))
32 import Gargantext.Database.Utils (fromField')
33 import Gargantext.Prelude
34 import Opaleye (QueryRunnerColumnDefault, queryRunnerColumnDefault, PGJsonb, fieldQueryRunnerColumn)
36 ------------------------------------------------------------------------
38 type NodeContact = Node HyperdataContact
40 data HyperdataContact =
41 HyperdataContact { _hc_bdd :: Maybe Text -- ID of Database source
42 , _hc_who :: Maybe ContactWho
43 , _hc_where :: Maybe [ContactWhere]
44 , _hc_lastValidation :: Maybe Text
45 , _hc_uniqIdBdd :: Maybe Text
46 , _hc_uniqId :: Maybe Text
48 } deriving (Eq, Show, Generic)
50 arbitraryHyperdataContact :: HyperdataContact
51 arbitraryHyperdataContact = HyperdataContact Nothing Nothing Nothing Nothing Nothing Nothing
54 ContactWho { _cw_id :: Maybe Int
55 , _cw_firstName :: Maybe Text
56 , _cw_lastName :: Maybe Text
57 , _cw_keywords :: Maybe [Text]
58 , _cw_freetags :: Maybe [Text]
59 } deriving (Eq, Show, Generic)
62 ContactWhere { _cw_organization :: Maybe [Text]
63 , _cw_labTeamDepts :: Maybe [Text]
64 , _cw_role :: Maybe Text
65 , _cw_office :: Maybe Text
66 , _cw_country :: Maybe Text
67 , _cw_city :: Maybe Text
68 , _cw_touch :: Maybe ContactTouch
69 , _cw_start :: Maybe UTCTime
70 , _cw_end :: Maybe UTCTime
71 } deriving (Eq, Show, Generic)
74 ContactTouch { _ct_mail :: Maybe Text
75 , _ct_phone :: Maybe Text
76 , _ct_url :: Maybe Text
77 } deriving (Eq, Show, Generic)
80 nodeContactW :: Maybe Name -> Maybe HyperdataContact
81 -> AnnuaireId -> UserId -> NodeWrite'
82 nodeContactW maybeName maybeContact aId =
83 node NodeContact name contact (Just aId)
85 name = maybe "Contact" identity maybeName
86 contact = maybe arbitraryHyperdataContact identity maybeContact
90 instance Hyperdata HyperdataContact
91 instance FromField HyperdataContact where
92 fromField = fromField'
93 instance QueryRunnerColumnDefault PGJsonb HyperdataContact where
94 queryRunnerColumnDefault = fieldQueryRunnerColumn
96 makeLenses ''ContactWho
97 makeLenses ''ContactWhere
98 makeLenses ''ContactTouch
99 makeLenses ''HyperdataContact
101 $(deriveJSON (unPrefix "_cw_") ''ContactWho)
102 $(deriveJSON (unPrefix "_cw_") ''ContactWhere)
103 $(deriveJSON (unPrefix "_ct_") ''ContactTouch)
104 $(deriveJSON (unPrefix "_hc_") ''HyperdataContact)