2 Module : Gargantext.Database.Action.Node
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
11 {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
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.Action.Node
23 import Gargantext.Core.Types (Name)
24 import Gargantext.Database.Admin.Types.Hyperdata
25 import Gargantext.Database.Admin.Types.Node
26 import Gargantext.Database.Prelude (Cmd)
27 import Gargantext.Database.Query.Table.Node
28 import Gargantext.Database.Query.Table.Node.Error
29 import Gargantext.Database.Query.Table.Node.UpdateOpaleye (updateHyperdata)
30 import Gargantext.Prelude
31 import Gargantext.Prelude.Utils (sha)
32 import Gargantext.Database.Prelude
33 import Control.Lens (view)
34 import Gargantext.Config (GargConfig(..))
36 ------------------------------------------------------------------------
37 -- | TODO mk all others nodes
38 mkNodeWithParent :: (HasNodeError err)
44 mkNodeWithParent NodeUser (Just _) _ _ = nodeError UserNoParent
46 ------------------------------------------------------------------------
47 mkNodeWithParent NodeUser Nothing uId name =
48 insertNodesWithParentR Nothing [node NodeUser name defaultHyperdataUser Nothing uId]
50 mkNodeWithParent _ Nothing _ _ = nodeError HasParent
51 ------------------------------------------------------------------------
52 mkNodeWithParent NodeFrameWrite i u n =
53 mkNodeWithParent_ConfigureHyperdata NodeFrameWrite i u n
55 mkNodeWithParent NodeFrameCalc i u n =
56 mkNodeWithParent_ConfigureHyperdata NodeFrameCalc i u n
58 mkNodeWithParent nt (Just pId) uId name = insertNode nt (Just name) Nothing pId uId
59 -- mkNodeWithParent _ _ _ _ = errorMsg "[G.D.A.Node.mkNodeWithParent] nees parent"
62 -- | Sugar to create a node, get his NodeId and update his Hyperdata after
63 mkNodeWithParent_ConfigureHyperdata :: (HasNodeError err)
69 mkNodeWithParent_ConfigureHyperdata NodeFrameWrite (Just i) uId name =
70 mkNodeWithParent_ConfigureHyperdata' NodeFrameWrite (Just i) uId name
72 mkNodeWithParent_ConfigureHyperdata NodeFrameCalc (Just i) uId name =
73 mkNodeWithParent_ConfigureHyperdata' NodeFrameCalc (Just i) uId name
75 mkNodeWithParent_ConfigureHyperdata _ _ _ _ = nodeError NotImplYet
78 -- | Function not exposed
79 mkNodeWithParent_ConfigureHyperdata' :: (HasNodeError err)
85 mkNodeWithParent_ConfigureHyperdata' nt (Just i) uId name = do
86 maybeNodeId <- case nt of
87 NodeFrameWrite -> insertNode NodeFrameWrite (Just name) Nothing i uId
88 NodeFrameCalc -> insertNode NodeFrameCalc (Just name) Nothing i uId
89 _ -> nodeError NeedsConfiguration
92 [] -> nodeError (DoesNotExist i)
94 config <- view hasConfig
96 NodeFrameWrite -> pure $ _gc_frame_write_url config
97 NodeFrameCalc -> pure $ _gc_frame_calc_url config
98 _ -> nodeError NeedsConfiguration
100 s = _gc_secretkey config
101 hd = HyperdataFrame u (sha $ s <> (cs $ show n))
102 _ <- updateHyperdata n hd
104 (_:_:_) -> nodeError MkNode
105 mkNodeWithParent_ConfigureHyperdata' _ _ _ _ = nodeError HasParent