2 Module : Gargantext.Database.Action.Share
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 module Gargantext.Database.Action.Share
15 import Control.Lens (view)
16 import Gargantext.Core.Types.Individu (User(..))
17 import Gargantext.Database.Action.Flow.Utils (getUserId)
18 import Gargantext.Database.Admin.Config (hasNodeType)
19 import Gargantext.Database.Admin.Types.Node (NodeId)
20 import Gargantext.Database.Admin.Types.Node -- (NodeType(..))
21 import Gargantext.Database.Prelude (Cmd)
22 import Gargantext.Database.Query.Table.Node (getNode)
23 import Gargantext.Database.Query.Table.Node.Error (HasNodeError)
24 import Gargantext.Database.Query.Table.NodeNode (insertNodeNode)
25 import Gargantext.Database.Query.Tree
26 import Gargantext.Database.Query.Tree.Root (getRoot)
27 import Gargantext.Database.Schema.Node
28 import Gargantext.Database.Schema.NodeNode (NodeNodePoly(..))
29 import Gargantext.Prelude
31 ------------------------------------------------------------------------
32 shareNodeWith :: HasNodeError err
36 shareNodeWith n u = do
37 nodeToCheck <- getNode n
38 userIdCheck <- getUserId u
39 if not (hasNodeType nodeToCheck NodeTeam)
40 then panic "Can share node Team only"
41 else if (view node_userId nodeToCheck == userIdCheck)
42 then panic "Can share to others only"
44 r <- map _node_id <$> getRoot u
46 Nothing -> panic "no root id"
47 Just r' -> findNodesId r' [NodeFolderShared]
48 insertNodeNode $ map (\s' -> NodeNode s' n Nothing Nothing) s
49 ------------------------------------------------------------------------