2 Module : Gargantext.API.Node.Corpus.New.File
3 Description : Server API
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 {-# OPTIONS_GHC -fno-warn-orphans #-}
14 {-# LANGUAGE ScopedTypeVariables #-}
15 {-# LANGUAGE TemplateHaskell #-}
16 {-# LANGUAGE TypeOperators #-}
18 module Gargantext.API.Node.Corpus.New.File
21 import Control.Lens ((.~), (?~))
22 import Control.Monad (forM)
25 import Data.Monoid (mempty)
27 import Data.Text (Text())
28 import GHC.Generics (Generic)
31 import Servant.Multipart
32 import Servant.Swagger.Internal
33 import Test.QuickCheck (elements)
34 import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
36 import Gargantext.Core.Types (TODO)
37 import Gargantext.Database.Admin.Types.Node
38 import Gargantext.Database.Prelude -- (Cmd, CmdM)
39 import Gargantext.Prelude
40 import Gargantext.Prelude.Crypto.Hash (hash)
42 -------------------------------------------------------------
49 deriving (Eq, Show, Generic)
51 instance ToSchema FileType
52 instance Arbitrary FileType where arbitrary = elements [CSV, PresseRIS]
53 instance ToParamSchema FileType
55 instance FromJSON FileType
56 instance ToJSON FileType
58 instance ToParamSchema (MultipartData Mem) where toParamSchema _ = toParamSchema (Proxy :: Proxy TODO)
60 instance FromHttpApiData FileType
62 parseUrlPiece "CSV" = pure CSV
63 parseUrlPiece "CSV_HAL" = pure CSV_HAL
64 parseUrlPiece "PresseRis" = pure PresseRIS
65 parseUrlPiece "ZIP" = pure ZIP
66 parseUrlPiece "WOS" = pure WOS
67 parseUrlPiece _ = pure CSV -- TODO error here
68 instance ToHttpApiData FileType where
69 toUrlPiece t = case t of
72 PresseRIS -> "PresseRis"
76 instance (ToParamSchema a, HasSwagger sub) =>
77 HasSwagger (MultipartForm tag a :> sub) where
79 toSwagger _ = toSwagger (Proxy :: Proxy sub)
84 & schema .~ ParamOther sch
86 & in_ .~ ParamFormData
87 & paramSchema .~ toParamSchema (Proxy :: Proxy a)
90 type WithUpload' = Summary "Upload file(s) to a corpus"
91 :> QueryParam "fileType" FileType
92 :> MultipartForm Mem (MultipartData Mem)
93 :> Post '[JSON] [Hash]
95 --postUpload :: NodeId -> Maybe FileType -> GargServer UploadAPI
96 --postUpload :: NodeId -> GargServer UploadAPI
101 postUpload _ Nothing _ = panic "fileType is a required parameter"
102 postUpload _ (Just fileType) multipartData = do
103 printDebug "File Type: " fileType
105 printDebug "Inputs:" ()
106 forM (inputs multipartData) $ \input -> do
107 printDebug "iName " (iName input)
108 printDebug "iValue " (iValue input)
111 _ <- forM (files multipartData) $ \file -> do
112 let content = fdPayload file
113 printDebug "XXX " (fdFileName file)
114 printDebug "YYY " content
116 -- is <- inputs multipartData
120 -------------------------------------------------------------------