Commit 4baef92d authored by Przemyslaw Kaminski's avatar Przemyslaw Kaminski

[docs download] fix CSV return value

parent 07e34aa5
...@@ -360,7 +360,8 @@ waitDocumentNgramsTableAsyncJob :: Token -> DocId -> JobID 'Unsafe -> ClientM (J ...@@ -360,7 +360,8 @@ waitDocumentNgramsTableAsyncJob :: Token -> DocId -> JobID 'Unsafe -> ClientM (J
-- document export API -- document export API
getDocumentExportJSON :: Token -> DocId -> ClientM DocumentExport.DocumentExport getDocumentExportJSON :: Token -> DocId -> ClientM DocumentExport.DocumentExport
getDocumentExportCSV :: Token -> DocId -> ClientM [DocumentExport.Document] getDocumentExportCSV :: Token -> DocId -> ClientM Text
--getDocumentExportCSV :: Token -> DocId -> ClientM [DocumentExport.Document]
-- count api -- count api
postCountQuery :: Token -> Query -> ClientM Counts postCountQuery :: Token -> Query -> ClientM Counts
......
...@@ -11,6 +11,8 @@ Portability : POSIX ...@@ -11,6 +11,8 @@ Portability : POSIX
module Gargantext.API.Node.Document.Export module Gargantext.API.Node.Document.Export
where where
import qualified Data.ByteString.Lazy.Char8 as BSC
import Data.Csv (encodeDefaultOrderedByName)
import qualified Data.Text as T import qualified Data.Text as T
import Data.Version (showVersion) import Data.Version (showVersion)
import Gargantext.API.Node.Document.Export.Types import Gargantext.API.Node.Document.Export.Types
...@@ -66,9 +68,10 @@ getDocumentsJSON uId pId = do ...@@ -66,9 +68,10 @@ getDocumentsJSON uId pId = do
getDocumentsCSV :: UserId getDocumentsCSV :: UserId
-> DocId -> DocId
-> GargNoServer [Document] -> GargNoServer T.Text -- [Document]
getDocumentsCSV uId pId = do getDocumentsCSV uId pId = do
DocumentExport { _de_documents } <- getDocumentsJSON uId pId DocumentExport { _de_documents } <- getDocumentsJSON uId pId
pure $ _de_documents pure $ T.pack $ BSC.unpack $ encodeDefaultOrderedByName _de_documents
...@@ -16,11 +16,13 @@ module Gargantext.API.Node.Document.Export.Types where ...@@ -16,11 +16,13 @@ module Gargantext.API.Node.Document.Export.Types where
import Data.Aeson.TH (deriveJSON) import Data.Aeson.TH (deriveJSON)
import Data.Csv (DefaultOrdered(..), ToNamedRecord(..), (.=), header, namedRecord) import Data.Csv (DefaultOrdered(..), ToNamedRecord(..), (.=), header, namedRecord)
import Data.Swagger import Data.Swagger
--import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import Gargantext.Core.Types import Gargantext.Core.Types
import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger) import Gargantext.Core.Utils.Prefix (unPrefix, unPrefixSwagger)
import Gargantext.Database.Admin.Types.Hyperdata (HyperdataDocument(..)) import Gargantext.Database.Admin.Types.Hyperdata (HyperdataDocument(..))
import Gargantext.Database.Schema.Node (NodePoly(..)) import Gargantext.Database.Schema.Node (NodePoly(..))
import Gargantext.Utils.Servant (CSV) --import Gargantext.Utils.Servant (CSV)
import Protolude import Protolude
--import Protolude.Partial (read) --import Protolude.Partial (read)
import Servant import Servant
...@@ -41,12 +43,23 @@ data Document = ...@@ -41,12 +43,23 @@ data Document =
--instance Read Document where --instance Read Document where
-- read "" = panic "not implemented" -- read "" = panic "not implemented"
instance DefaultOrdered Document where instance DefaultOrdered Document where
headerOrder _ = header ["id", "name"] headerOrder _ = header ["Publication Day"
, "Publication Month"
, "Publication Year"
, "Authors"
, "Title"
, "Source"
, "Abstract"]
instance ToNamedRecord Document where instance ToNamedRecord Document where
toNamedRecord (Document { _d_document = Node { .. }}) = toNamedRecord (Document { _d_document = Node { .. }}) =
namedRecord namedRecord
[ "id" .= _node_id [ "Publication Day" .= _hd_publication_day _node_hyperdata
, "name" .= _node_name ] , "Publication Month" .= _hd_publication_month _node_hyperdata
, "Publication Year" .= _hd_publication_year _node_hyperdata
, "Authors" .= _hd_authors _node_hyperdata
, "Title" .= _hd_title _node_hyperdata
, "Source" .= (TE.encodeUtf8 <$> _hd_source _node_hyperdata)
, "Abstract" .= (TE.encodeUtf8 <$> _hd_abstract _node_hyperdata) ]
data Ngrams = data Ngrams =
Ngrams { _ng_ngrams :: [Text] Ngrams { _ng_ngrams :: [Text]
...@@ -79,7 +92,7 @@ type API = Summary "Document Export" ...@@ -79,7 +92,7 @@ type API = Summary "Document Export"
:> ( "json" :> ( "json"
:> Get '[JSON] DocumentExport :> Get '[JSON] DocumentExport
:<|> "csv" :<|> "csv"
:> Get '[CSV] [Document]) :> Get '[PlainText] Text) -- [Document])
$(deriveJSON (unPrefix "_de_") ''DocumentExport) $(deriveJSON (unPrefix "_de_") ''DocumentExport)
$(deriveJSON (unPrefix "_d_") ''Document) $(deriveJSON (unPrefix "_d_") ''Document)
......
...@@ -66,8 +66,8 @@ instance Show SVG where ...@@ -66,8 +66,8 @@ instance Show SVG where
instance Accept SVG where instance Accept SVG where
contentType _ = "SVG" // "image/svg+xml" /: ("charset", "utf-8") contentType _ = "SVG" // "image/svg+xml" /: ("charset", "utf-8")
instance Show a => MimeRender PlainText a where --instance Show a => MimeRender PlainText a where
mimeRender _ val = cs ("" <> show val) -- mimeRender _ val = cs ("" <> show val)
instance MimeRender SVG SVG where instance MimeRender SVG SVG where
mimeRender _ (SVG s) = DBL.fromStrict s mimeRender _ (SVG s) = DBL.fromStrict s
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment