2 Module : Gargantext.API.Node.Share
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 {-# LANGUAGE TemplateHaskell #-}
13 {-# LANGUAGE TypeOperators #-}
15 module Gargantext.API.Node.Share
20 import Data.Text (Text)
21 import GHC.Generics (Generic)
23 import Test.QuickCheck (elements)
24 import Test.QuickCheck.Arbitrary
26 import Gargantext.API.Prelude
27 import Gargantext.Core.Types.Individu (User(..))
28 import Gargantext.Database.Action.Share (ShareNodeWith(..))
29 import Gargantext.Database.Action.Share as DB (shareNodeWith, unPublish)
30 import Gargantext.Database.Admin.Types.Node
31 import Gargantext.Database.Prelude
32 import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..))
33 import Gargantext.Prelude
35 ------------------------------------------------------------------------
36 data ShareNodeParams = ShareTeamParams { username :: Text }
37 | SharePublicParams { node_id :: NodeId}
39 ------------------------------------------------------------------------
40 -- TODO unPrefix "pn_" FromJSON, ToJSON, ToSchema, adapt frontend.
41 instance FromJSON ShareNodeParams where
42 parseJSON = genericParseJSON (defaultOptions { sumEncoding = ObjectWithSingleField })
43 instance ToJSON ShareNodeParams where
44 toJSON = genericToJSON (defaultOptions { sumEncoding = ObjectWithSingleField })
45 instance ToSchema ShareNodeParams
46 instance Arbitrary ShareNodeParams where
47 arbitrary = elements [ ShareTeamParams "user1"
48 , SharePublicParams (NodeId 1)
50 ------------------------------------------------------------------------
52 api :: HasNodeError err
56 api nId (ShareTeamParams user) =
57 fromIntegral <$> DB.shareNodeWith (ShareNodeWith_User NodeFolderShared (UserName user)) nId
58 api nId2 (SharePublicParams nId1) =
59 fromIntegral <$> DB.shareNodeWith (ShareNodeWith_Node NodeFolderPublic nId1) nId2
61 ------------------------------------------------------------------------
62 type API = Summary " Share Node with username"
63 :> ReqBody '[JSON] ShareNodeParams
66 ------------------------------------------------------------------------
67 type Unpublish = Summary " Unpublish Node"
68 :> Capture "node_id" NodeId
71 unPublish :: NodeId -> GargServer Unpublish
72 unPublish n = DB.unPublish n