2 Module : Gargantext.Database.Action.Delete
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
10 TODO: right managements of nodes children of node Team
11 -- TODO add proper Right Management Type
17 module Gargantext.Database.Action.Delete
20 import Control.Lens (view, (^.))
24 import Gargantext.Core
25 import Gargantext.Core.Types.Individu (User(..))
26 import Gargantext.Database.Action.Share (delFolderTeam)
27 import Gargantext.Database.Action.User (getUserId)
28 import Gargantext.Database.Admin.Types.Hyperdata.File
29 import Gargantext.Database.Admin.Types.Node -- (NodeType(..))
30 import Gargantext.Database.Prelude (Cmd', CmdCommon)
31 import Gargantext.Database.Query.Table.Node (getNodeWith)
32 import Gargantext.Database.Query.Table.Node.Error (HasNodeError)
33 import Gargantext.Database.Schema.Node
34 import Gargantext.Prelude
35 import qualified Gargantext.Database.GargDB as GargDB
36 import qualified Gargantext.Database.Query.Table.Node as N (getNode, deleteNode)
38 ------------------------------------------------------------------------
40 -- Delete Corpus children accoring its types
41 -- Delete NodeList (NodeStory + cbor file)
42 deleteNode :: (CmdCommon env, HasNodeError err)
46 deleteNode u nodeId = do
47 node' <- N.getNode nodeId
48 case (view node_typename node') of
49 nt | nt == toDBid NodeUser -> panic "[G.D.A.D.deleteNode] Not allowed to delete NodeUser (yet)"
50 nt | nt == toDBid NodeTeam -> do
52 if _node_user_id node' == uId
53 then N.deleteNode nodeId
54 else delFolderTeam u nodeId
55 nt | nt == toDBid NodeFile -> do
56 node <- getNodeWith nodeId (Proxy :: Proxy HyperdataFile)
57 let (HyperdataFile { _hff_path = path }) = node ^. node_hyperdata
58 GargDB.rmFile $ unpack path
60 _ -> N.deleteNode nodeId
62 -- if hasNodeType node' NodeUser
63 -- then panic "Not allowed to delete NodeUser (yet)"
64 -- else if hasNodeType node' NodeTeam
67 -- if _node_user_id node' == uId
68 -- then N.deleteNode nodeId
69 -- else delFolderTeam u nodeId
70 -- else N.deleteNode nodeId