]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/Database/Action/Delete.hs
[FEAT/FIX] Stemming -> Parent/Children -> Patch ok
[gargantext.git] / src / Gargantext / Database / Action / Delete.hs
1 {-|
2 Module : Gargantext.Database.Action.Delete
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 TODO: right managements of nodes children of node Team
11 -- TODO add proper Right Management Type
12
13 TODO: NodeError
14
15 -}
16
17 module Gargantext.Database.Action.Delete
18 where
19
20 import Control.Lens (view, (^.))
21 import Data.Text
22 import Servant
23
24 import Gargantext.Core.Types.Individu (User(..))
25 import Gargantext.Database.Action.User (getUserId)
26 import Gargantext.Database.Action.Share (delFolderTeam)
27 import Gargantext.Database.Admin.Config (nodeTypeId)
28 import Gargantext.Database.Admin.Types.Hyperdata.File
29 import Gargantext.Database.Admin.Types.Node -- (NodeType(..))
30 import Gargantext.Database.Prelude (Cmd', HasConfig, HasConnectionPool)
31 import qualified Gargantext.Database.Query.Table.Node as N (getNode, deleteNode)
32 import Gargantext.Database.Query.Table.Node (getNodeWith)
33 import Gargantext.Database.Query.Table.Node.Error (HasNodeError)
34 import Gargantext.Database.Schema.Node
35 import Gargantext.Prelude
36 import qualified Gargantext.Prelude.Utils as GPU
37
38 ------------------------------------------------------------------------
39
40 deleteNode :: (HasConfig env, HasConnectionPool env, HasNodeError err)
41 => User
42 -> NodeId
43 -> Cmd' env err Int
44 deleteNode u nodeId = do
45 node' <- N.getNode nodeId
46 case (view node_typename node') of
47 nt | nt == nodeTypeId NodeUser -> panic "Not allowed to delete NodeUser (yet)"
48 nt | nt == nodeTypeId NodeTeam -> do
49 uId <- getUserId u
50 if _node_userId node' == uId
51 then N.deleteNode nodeId
52 else delFolderTeam u nodeId
53 nt | nt == nodeTypeId NodeFile -> do
54 node <- getNodeWith nodeId (Proxy :: Proxy HyperdataFile)
55 let (HyperdataFile { _hff_path = path }) = node ^. node_hyperdata
56 GPU.removeFile $ unpack path
57 N.deleteNode nodeId
58 _ -> N.deleteNode nodeId
59
60 -- if hasNodeType node' NodeUser
61 -- then panic "Not allowed to delete NodeUser (yet)"
62 -- else if hasNodeType node' NodeTeam
63 -- then do
64 -- uId <- getUserId u
65 -- if _node_userId node' == uId
66 -- then N.deleteNode nodeId
67 -- else delFolderTeam u nodeId
68 -- else N.deleteNode nodeId