]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/Database/NodeNode.hs
Merge branch 'dbflow' of ssh://gitlab.iscpif.fr:20022/gargantext/haskell-gargantext...
[gargantext.git] / src / Gargantext / Database / NodeNode.hs
1 {-|
2 Module : Gargantext.Database.NodeNode
3 Description :
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
8 Portability : POSIX
9
10 Here is a longer description of this module, containing some
11 commentary with @some markup@.
12 -}
13
14 {-# OPTIONS_GHC -fno-warn-orphans #-}
15
16 {-# LANGUAGE Arrows #-}
17 {-# LANGUAGE FlexibleInstances #-}
18 {-# LANGUAGE FunctionalDependencies #-}
19 {-# LANGUAGE MultiParamTypeClasses #-}
20 {-# LANGUAGE NoImplicitPrelude #-}
21 {-# LANGUAGE TemplateHaskell #-}
22
23 module Gargantext.Database.NodeNode where
24
25 import Gargantext.Prelude
26 import Data.Maybe (Maybe)
27 import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
28 import Control.Lens.TH (makeLensesWith, abbreviatedFields)
29 import qualified Database.PostgreSQL.Simple as PGS
30
31 import Opaleye
32
33
34 data NodeNodePoly node1_id node2_id score fav del
35 = NodeNode { nodeNode_node1_id :: node1_id
36 , nodeNode_node2_id :: node2_id
37 , nodeNode_score :: score
38 , nodeNode_favorite :: fav
39 , nodeNode_delete :: del
40 } deriving (Show)
41
42 type NodeNodeWrite = NodeNodePoly (Column (PGInt4))
43 (Column (PGInt4))
44 (Maybe (Column (PGFloat8)))
45 (Maybe (Column (PGBool)))
46 (Maybe (Column (PGBool)))
47
48 type NodeNodeRead = NodeNodePoly (Column (PGInt4))
49 (Column (PGInt4))
50 (Column (PGFloat8))
51 (Column (PGBool))
52 (Column (PGBool))
53
54 type NodeNodeReadNull = NodeNodePoly (Column (Nullable PGInt4))
55 (Column (Nullable PGInt4))
56 (Column (Nullable PGFloat8))
57 (Column (Nullable PGBool))
58 (Column (Nullable PGBool))
59
60 type NodeNode = NodeNodePoly Int Int (Maybe Double) (Maybe Bool) (Maybe Bool)
61
62 $(makeAdaptorAndInstance "pNodeNode" ''NodeNodePoly)
63 $(makeLensesWith abbreviatedFields ''NodeNodePoly)
64
65 nodeNodeTable :: Table NodeNodeWrite NodeNodeRead
66 nodeNodeTable = Table "nodes_nodes" (pNodeNode
67 NodeNode { nodeNode_node1_id = required "node1_id"
68 , nodeNode_node2_id = required "node2_id"
69 , nodeNode_score = optional "score"
70 , nodeNode_favorite = optional "favorite"
71 , nodeNode_delete = optional "delete"
72 }
73 )
74
75 queryNodeNodeTable :: Query NodeNodeRead
76 queryNodeNodeTable = queryTable nodeNodeTable
77
78
79 -- | not optimized (get all ngrams without filters)
80 nodeNodes :: PGS.Connection -> IO [NodeNode]
81 nodeNodes conn = runQuery conn queryNodeNodeTable
82
83 instance QueryRunnerColumnDefault (Nullable PGInt4) Int where
84 queryRunnerColumnDefault = fieldQueryRunnerColumn
85
86 instance QueryRunnerColumnDefault PGFloat8 (Maybe Double) where
87 queryRunnerColumnDefault = fieldQueryRunnerColumn
88
89 instance QueryRunnerColumnDefault PGBool (Maybe Bool) where
90 queryRunnerColumnDefault = fieldQueryRunnerColumn
91
92
93
94
95