2 Module : Gargantext.API.Node.Post
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
10 New = Post maybe change the name
11 Async new node feature
15 {-# LANGUAGE TemplateHaskell #-}
16 {-# LANGUAGE TypeOperators #-}
17 {-# OPTIONS_GHC -fno-warn-orphans #-}
19 module Gargantext.API.Node.New
22 import Control.Lens hiding (elements, Empty)
25 import Data.Text (Text)
26 import GHC.Generics (Generic)
28 import Servant.Job.Async
29 import Test.QuickCheck (elements)
30 import Test.QuickCheck.Arbitrary
31 import Web.FormUrlEncoded (FromForm)
33 import Gargantext.API.Admin.Orchestrator.Types (JobLog(..))
34 import Gargantext.API.Node.Corpus.New (AsyncJobs)
35 import Gargantext.API.Prelude
36 import Gargantext.Database.Action.Flow.Types
37 import Gargantext.Database.Action.Node
38 import Gargantext.Database.Admin.Types.Node
39 import Gargantext.Database.Prelude
40 import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..))
41 import Gargantext.Database.Query.Table.Node.User
42 import Gargantext.Database.Schema.Node
43 import Gargantext.Prelude
45 ------------------------------------------------------------------------
46 data PostNode = PostNode { pn_name :: Text
47 , pn_typename :: NodeType}
49 ------------------------------------------------------------------------
50 -- TODO unPrefix "pn_" FromJSON, ToJSON, ToSchema, adapt frontend.
51 instance FromJSON PostNode
52 instance ToJSON PostNode
53 instance ToSchema PostNode
54 instance FromForm PostNode
55 instance Arbitrary PostNode where
56 arbitrary = elements [PostNode "Node test" NodeCorpus]
58 ------------------------------------------------------------------------
59 postNode :: HasNodeError err
64 postNode uId pId (PostNode nodeName nt) = do
65 nodeUser <- getNodeUser (NodeId uId)
66 let uId' = nodeUser ^. node_userId
67 mkNodeWithParent nt (Just pId) uId' nodeName
69 ------------------------------------------------------------------------
70 type PostNodeAsync = Summary "Post Node"
72 :> AsyncJobs JobLog '[FormUrlEncoded] PostNode JobLog
75 postNodeAsyncAPI :: UserId -> NodeId -> GargServer PostNodeAsync
76 postNodeAsyncAPI uId nId =
78 JobFunction (\p logs -> postNodeAsync uId nId p (liftBase . logs))
80 ------------------------------------------------------------------------
81 postNodeAsync :: FlowCmdM env err m
87 postNodeAsync uId nId (PostNode nodeName tn) logStatus = do
89 printDebug "postNodeAsync" nId
90 logStatus JobLog { _scst_succeeded = Just 1
91 , _scst_failed = Just 0
92 , _scst_remaining = Just 2
93 , _scst_events = Just []
96 nodeUser <- getNodeUser (NodeId uId)
98 -- _ <- threadDelay 1000
99 logStatus JobLog { _scst_succeeded = Just 1
100 , _scst_failed = Just 0
101 , _scst_remaining = Just 2
102 , _scst_events = Just []
105 let uId' = nodeUser ^. node_userId
106 _ <- mkNodeWithParent tn (Just nId) uId' nodeName
108 pure JobLog { _scst_succeeded = Just 3
109 , _scst_failed = Just 0
110 , _scst_remaining = Just 0
111 , _scst_events = Just []