2 Module : Gargantext.Database.Schema.Node
3 Description : Main requests of Node to the database
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 {-# OPTIONS_GHC -fno-warn-orphans #-}
14 {-# LANGUAGE Arrows #-}
15 {-# LANGUAGE ConstraintKinds #-}
16 {-# LANGUAGE FunctionalDependencies #-}
17 {-# LANGUAGE TemplateHaskell #-}
18 {-# LANGUAGE TypeFamilies #-}
20 module Gargantext.Database.Schema.Node where
22 import Control.Lens hiding (elements, (&))
23 import Gargantext.Database.Schema.Prelude
24 import Prelude hiding (null, id, map, sum)
26 ------------------------------------------------------------------------
27 -- Main polymorphic Node definition
36 Node { _node_id :: !id
37 , _node_hash_id :: !hash_id
38 , _node_typename :: !typename
40 , _node_user_id :: !user_id
41 , _node_parent_id :: !parent_id
46 , _node_hyperdata :: !hyperdata
47 } deriving (Show, Generic)
49 ------------------------------------------------------------------------
50 -- Automatic instances derivation
51 $(deriveJSON (unPrefix "_node_") ''NodePoly)
52 $(makeLenses ''NodePoly)
54 $(makeAdaptorAndInstance "pNode" ''NodePoly)
55 $(makeLensesWith abbreviatedFields ''NodePoly)
57 nodeTable :: Table NodeWrite NodeRead
58 nodeTable = Table "nodes" (pNode Node { _node_id = optionalTableField "id"
59 , _node_hash_id = optionalTableField "hash_id"
60 , _node_typename = requiredTableField "typename"
61 , _node_user_id = requiredTableField "user_id"
63 , _node_parent_id = optionalTableField "parent_id"
64 , _node_name = requiredTableField "name"
65 , _node_date = optionalTableField "date"
67 , _node_hyperdata = requiredTableField "hyperdata"
68 -- ignoring ts_vector field here
72 queryNodeTable :: Query NodeRead
73 queryNodeTable = selectTable nodeTable
74 ------------------------------------------------------------------------
75 type NodeWrite = NodePoly (Maybe (Column SqlInt4) )
76 (Maybe (Column SqlText) )
79 (Maybe (Column SqlInt4) )
81 (Maybe (Column SqlTimestamptz))
84 type NodeRead = NodePoly (Column SqlInt4 )
90 (Column SqlTimestamptz )
93 type NodeReadNull = NodePoly (Column (Nullable SqlInt4))
94 (Column (Nullable SqlText))
95 (Column (Nullable SqlInt4))
96 (Column (Nullable SqlInt4))
97 (Column (Nullable SqlInt4))
98 (Column (Nullable SqlText))
99 (Column (Nullable SqlTimestamptz))
100 (Column (Nullable SqlJsonb))
101 ------------------------------------------------------------------------
102 -- | Node(Read|Write)Search is slower than Node(Write|Read) use it
103 -- for full text search only
105 type NodeSearchWrite =
107 (Maybe (Column SqlInt4) )
110 (Column (Nullable SqlInt4) )
112 (Maybe (Column SqlTimestamptz))
114 (Maybe (Column SqlTSVector) )
116 type NodeSearchRead =
121 (Column (Nullable SqlInt4 ))
123 (Column SqlTimestamptz )
125 (Column SqlTSVector )
127 type NodeSearchReadNull =
129 (Column (Nullable SqlInt4) )
130 (Column (Nullable SqlInt4) )
131 (Column (Nullable SqlInt4) )
132 (Column (Nullable SqlInt4) )
133 (Column (Nullable SqlText) )
134 (Column (Nullable SqlTimestamptz))
135 (Column (Nullable SqlJsonb) )
136 (Column (Nullable SqlTSVector) )
139 data NodePolySearch id
147 NodeSearch { _ns_id :: id
148 , _ns_typename :: typename
149 , _ns_user_id :: user_id
150 -- , nodeUniqId :: shaId
151 , _ns_parent_id :: parent_id
155 , _ns_hyperdata :: hyperdata
156 , _ns_search :: search
157 } deriving (Show, Generic)
159 $(makeAdaptorAndInstance "pNodeSearch" ''NodePolySearch)
160 $(makeLensesWith abbreviatedFields ''NodePolySearch)
161 $(deriveJSON (unPrefix "_ns_") ''NodePolySearch)
162 $(makeLenses ''NodePolySearch)
164 nodeTableSearch :: Table NodeSearchWrite NodeSearchRead
165 nodeTableSearch = Table "nodes" ( pNodeSearch
166 NodeSearch { _ns_id = optionalTableField "id"
167 , _ns_typename = requiredTableField "typename"
168 , _ns_user_id = requiredTableField "user_id"
170 , _ns_parent_id = requiredTableField "parent_id"
171 , _ns_name = requiredTableField "name"
172 , _ns_date = optionalTableField "date"
174 , _ns_hyperdata = requiredTableField "hyperdata"
175 , _ns_search = optionalTableField "search"
178 ------------------------------------------------------------------------