]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/Database/NodeNgram.hs
[FLOW][DB][NGRAMS] group inserted in db.
[gargantext.git] / src / Gargantext / Database / NodeNgram.hs
1 {-|
2 Module : Gargantext.Database.NodeNgram
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
24 module Gargantext.Database.NodeNgram where
25
26 import Gargantext.Prelude
27 import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
28 import Control.Lens.TH (makeLensesWith, abbreviatedFields)
29 import Gargantext.Database.Node (mkCmd, Cmd(..))
30 import Opaleye
31
32 data NodeNgramPoly id node_id ngram_id weight ngrams_type
33 = NodeNgram { nodeNgram_NodeNgramId :: id
34 , nodeNgram_NodeNgramNodeId :: node_id
35 , nodeNgram_NodeNgramNgramId :: ngram_id
36 , nodeNgram_NodeNgramWeight :: weight
37 , nodeNgram_NodeNgramType :: ngrams_type
38 } deriving (Show)
39
40 type NodeNgramWrite =
41 NodeNgramPoly
42 (Maybe (Column PGInt4 ))
43 (Column PGInt4 )
44 (Column PGInt4 )
45 (Column PGFloat8)
46 (Column PGInt4 )
47
48 type NodeNgramRead =
49 NodeNgramPoly
50 (Column PGInt4 )
51 (Column PGInt4 )
52 (Column PGInt4 )
53 (Column PGFloat8)
54 (Column PGInt4 )
55
56 type NodeNgram =
57 NodeNgramPoly (Maybe Int) Int Int Double Int
58
59 $(makeAdaptorAndInstance "pNodeNgram" ''NodeNgramPoly)
60 $(makeLensesWith abbreviatedFields ''NodeNgramPoly)
61
62
63 nodeNgramTable :: Table NodeNgramWrite NodeNgramRead
64 nodeNgramTable = Table "nodes_ngrams"
65 ( pNodeNgram NodeNgram
66 { nodeNgram_NodeNgramId = optional "id"
67 , nodeNgram_NodeNgramNodeId = required "node_id"
68 , nodeNgram_NodeNgramNgramId = required "ngram_id"
69 , nodeNgram_NodeNgramWeight = required "weight"
70 , nodeNgram_NodeNgramType = required "ngrams_type"
71 }
72 )
73
74 queryNodeNgramTable :: Query NodeNgramRead
75 queryNodeNgramTable = queryTable nodeNgramTable
76
77 insertNodeNgrams :: [NodeNgram] -> Cmd Int
78 insertNodeNgrams = insertNodeNgramW
79 . map (\(NodeNgram _ n g w t) ->
80 NodeNgram Nothing (pgInt4 n) (pgInt4 g)
81 (pgDouble w) (pgInt4 t)
82 )
83
84 insertNodeNgramW :: [NodeNgramWrite] -> Cmd Int
85 insertNodeNgramW nns =
86 mkCmd $ \c -> fromIntegral
87 <$> runInsertMany c nodeNgramTable nns
88