1 {-# LANGUAGE AllowAmbiguousTypes #-}
2 {-# LANGUAGE MonoLocalBinds #-}
3 {-# LANGUAGE TypeOperators #-}
5 module Gargantext.API.Node.FrameCalcUpload where
7 import Control.Lens ((^.))
10 import GHC.Generics (Generic)
12 import Servant.Job.Async
13 import Web.FormUrlEncoded (FromForm)
15 import Gargantext.API.Admin.Orchestrator.Types (JobLog(..), AsyncJobs)
16 import Gargantext.API.Prelude
17 import Gargantext.Database.Action.Flow.Types
18 import Gargantext.Database.Admin.Types.Hyperdata.Frame
19 import Gargantext.Database.Admin.Types.Node
20 import Gargantext.Database.Query.Table.Node (getNodeWith)
21 import Gargantext.Database.Schema.Node (node_hyperdata)
22 import Gargantext.Prelude
24 data FrameCalcUpload = FrameCalcUpload ()
27 instance FromForm FrameCalcUpload
28 instance FromJSON FrameCalcUpload
29 instance ToJSON FrameCalcUpload
30 instance ToSchema FrameCalcUpload
32 type FrameCalcUploadAPI = Summary " FrameCalc upload"
36 :> AsyncJobs JobLog '[JSON] FrameCalcUpload JobLog
38 frameCalcUploadAPI :: UserId -> NodeId -> GargServer FrameCalcUploadAPI
39 frameCalcUploadAPI uId nId =
41 JobFunction (\p logs -> frameCalcUploadAsync uId nId p (liftBase . logs))
44 frameCalcUploadAsync :: FlowCmdM env err m
50 frameCalcUploadAsync uId nId _f logStatus = do
51 logStatus JobLog { _scst_succeeded = Just 0
52 , _scst_failed = Just 0
53 , _scst_remaining = Just 1
54 , _scst_events = Just []
57 printDebug "[frameCalcUploadAsync] uId" uId
58 printDebug "[frameCalcUploadAsync] nId" nId
60 node <- getNodeWith nId (Proxy :: Proxy HyperdataFrame)
61 let (HyperdataFrame { _hf_base = base
62 , _hf_frame_id = frame_id }) = node ^. node_hyperdata
64 let csvUrl = base <> "/" <> frame_id <> ".csv"
65 printDebug "[frameCalcUploadAsync] csvUrl" csvUrl
67 pure JobLog { _scst_succeeded = Just 1
68 , _scst_failed = Just 0
69 , _scst_remaining = Just 0
70 , _scst_events = Just []