]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/API/Node/FrameCalcUpload.hs
[frameCalc upload] add missing FrameCalcUpload.hs file
[gargantext.git] / src / Gargantext / API / Node / FrameCalcUpload.hs
1 {-# LANGUAGE AllowAmbiguousTypes #-}
2 {-# LANGUAGE MonoLocalBinds #-}
3 {-# LANGUAGE TypeOperators #-}
4
5 module Gargantext.API.Node.FrameCalcUpload where
6
7 import Control.Lens ((^.))
8 import Data.Aeson
9 import Data.Swagger
10 import GHC.Generics (Generic)
11 import Servant
12 import Servant.Job.Async
13 import Web.FormUrlEncoded (FromForm)
14
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
23
24 data FrameCalcUpload = FrameCalcUpload ()
25 deriving (Generic)
26
27 instance FromForm FrameCalcUpload
28 instance FromJSON FrameCalcUpload
29 instance ToJSON FrameCalcUpload
30 instance ToSchema FrameCalcUpload
31
32 type FrameCalcUploadAPI = Summary " FrameCalc upload"
33 :> "add"
34 :> "framecalc"
35 :> "async"
36 :> AsyncJobs JobLog '[JSON] FrameCalcUpload JobLog
37
38 frameCalcUploadAPI :: UserId -> NodeId -> GargServer FrameCalcUploadAPI
39 frameCalcUploadAPI uId nId =
40 serveJobsAPI $
41 JobFunction (\p logs -> frameCalcUploadAsync uId nId p (liftBase . logs))
42
43
44 frameCalcUploadAsync :: FlowCmdM env err m
45 => UserId
46 -> NodeId
47 -> FrameCalcUpload
48 -> (JobLog -> m ())
49 -> m JobLog
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 []
55 }
56
57 printDebug "[frameCalcUploadAsync] uId" uId
58 printDebug "[frameCalcUploadAsync] nId" nId
59
60 node <- getNodeWith nId (Proxy :: Proxy HyperdataFrame)
61 let (HyperdataFrame { _hf_base = base
62 , _hf_frame_id = frame_id }) = node ^. node_hyperdata
63
64 let csvUrl = base <> "/" <> frame_id <> ".csv"
65 printDebug "[frameCalcUploadAsync] csvUrl" csvUrl
66
67 pure JobLog { _scst_succeeded = Just 1
68 , _scst_failed = Just 0
69 , _scst_remaining = Just 0
70 , _scst_events = Just []
71 }