[tsv] tsv v4 endpoint

parent b47bbd5f
Pipeline #7989 passed with stages
in 51 minutes and 35 seconds
...@@ -25,6 +25,7 @@ import Gargantext.API.Prelude (IsGargServer) ...@@ -25,6 +25,7 @@ import Gargantext.API.Prelude (IsGargServer)
import Gargantext.API.Routes.Named.Document qualified as Named import Gargantext.API.Routes.Named.Document qualified as Named
import Gargantext.Core (toDBid) import Gargantext.Core (toDBid)
import Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv3 qualified as TSVv3 import Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv3 qualified as TSVv3
import Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv4 qualified as TSVv4
import Gargantext.Core.Text.Corpus.Parsers.TSV.Utils (writeDocs2TsvOrdered) import Gargantext.Core.Text.Corpus.Parsers.TSV.Utils (writeDocs2TsvOrdered)
import Gargantext.Database.Admin.Types.Node (DocId, NodeId, NodeType(..)) import Gargantext.Database.Admin.Types.Node (DocId, NodeId, NodeType(..))
import Gargantext.Database.Prelude import Gargantext.Database.Prelude
...@@ -45,7 +46,8 @@ documentExportAPI :: IsGargServer env err m ...@@ -45,7 +46,8 @@ documentExportAPI :: IsGargServer env err m
documentExportAPI userNodeId dId = Named.DocumentExportAPI $ Named.DocumentExportEndpoints documentExportAPI userNodeId dId = Named.DocumentExportAPI $ Named.DocumentExportEndpoints
{ exportJSONEp = getDocumentsJSON userNodeId dId { exportJSONEp = getDocumentsJSON userNodeId dId
, exportJSONZipEp = getDocumentsJSONZip userNodeId dId , exportJSONZipEp = getDocumentsJSONZip userNodeId dId
, exportTSVEp = getDocumentsTSV userNodeId dId , exportTSVEp = getDocumentsTSVv3 userNodeId dId
, exportTSVv4Ep = getDocumentsTSVv4 userNodeId dId
} }
-------------------------------------------------- --------------------------------------------------
...@@ -80,12 +82,12 @@ getDocumentsJSONZip userNodeId pId = do ...@@ -80,12 +82,12 @@ getDocumentsJSONZip userNodeId pId = do
, dezFileName dexpz , dezFileName dexpz
, ".zip" ]) dexpz , ".zip" ]) dexpz
getDocumentsTSV :: IsGargServer err env m getDocumentsTSVv3 :: IsGargServer err env m
=> NodeId => NodeId
-- ^ The Node ID of the target user -- ^ The Node ID of the target user
-> DocId -> DocId
-> m (Headers '[Header "Content-Disposition" T.Text] T.Text) -- [Document] -> m (Headers '[Header "Content-Disposition" T.Text] T.Text) -- [Document]
getDocumentsTSV userNodeId pId = do getDocumentsTSVv3 userNodeId pId = do
dexp <- getDocumentExport userNodeId pId dexp <- getDocumentExport userNodeId pId
let ret = writeDocs2TsvOrdered TSVv3.doc2tsv (deHyperdata dexp) let ret = writeDocs2TsvOrdered TSVv3.doc2tsv (deHyperdata dexp)
...@@ -95,6 +97,21 @@ getDocumentsTSV userNodeId pId = do ...@@ -95,6 +97,21 @@ getDocumentsTSV userNodeId pId = do
ret ret
getDocumentsTSVv4 :: IsGargServer err env m
=> NodeId
-- ^ The Node ID of the target user
-> DocId
-> m (Headers '[Header "Content-Disposition" T.Text] T.Text) -- [Document]
getDocumentsTSVv4 userNodeId pId = do
dexp <- getDocumentExport userNodeId pId
let ret = writeDocs2TsvOrdered TSVv4.doc2tsv (deHyperdata dexp)
pure $ addHeader (T.concat [ "attachment; filename=GarganText_DocsList-"
, T.pack $ show pId
, ".tsv"])
ret
......
...@@ -43,6 +43,8 @@ data DocumentExportEndpoints mode = DocumentExportEndpoints ...@@ -43,6 +43,8 @@ data DocumentExportEndpoints mode = DocumentExportEndpoints
:> Get '[ZIP] (Headers '[Servant.Header "Content-Disposition" Text] DocumentExportZIP) :> Get '[ZIP] (Headers '[Servant.Header "Content-Disposition" Text] DocumentExportZIP)
, exportTSVEp :: mode :- "tsv" , exportTSVEp :: mode :- "tsv"
:> Get '[PlainText] (Headers '[Servant.Header "Content-Disposition" Text] Text) :> Get '[PlainText] (Headers '[Servant.Header "Content-Disposition" Text] Text)
, exportTSVv4Ep :: mode :- "tsvv4"
:> Get '[PlainText] (Headers '[Servant.Header "Content-Disposition" Text] Text)
} deriving Generic } deriving Generic
newtype DocumentsFromWriteNodesAPI mode = DocumentsFromWriteNodesAPI newtype DocumentsFromWriteNodesAPI mode = DocumentsFromWriteNodesAPI
......
...@@ -130,6 +130,4 @@ validators = ...@@ -130,6 +130,4 @@ validators =
, ("Title", validTextField) , ("Title", validTextField)
, ("Source", validTextField) , ("Source", validTextField)
, ("Abstract", validTextField) , ("Abstract", validTextField)
-- TODO validDateField
-- , ("Publication Date", validTextField)
] ]
...@@ -12,21 +12,12 @@ Portability : POSIX ...@@ -12,21 +12,12 @@ Portability : POSIX
module Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv4 where module Gargantext.Core.Text.Corpus.Parsers.TSV.TSVv4 where
import Data.Csv import Data.Csv
-- import Gargantext.Core.Utils.DateUtils qualified as DateUtils
-- import Gargantext.Core.Text.Corpus.Parsers.TSV.IntOrDec -- import Gargantext.Core.Text.Corpus.Parsers.TSV.IntOrDec
import Gargantext.Database.Admin.Types.Hyperdata.Document ( HyperdataDocument(..) ) import Gargantext.Database.Admin.Types.Hyperdata.Document ( HyperdataDocument(..) )
import Gargantext.Prelude import Gargantext.Prelude
headerTsvGargV4 :: Header
headerTsvGargV4 =
header [ "title"
, "source"
, "publication_year"
, "publication_month"
, "publication_day"
, "abstract"
, "authors"
]
data TsvGargV4 = TsvGargV4 data TsvGargV4 = TsvGargV4
{ d_docId :: !Int { d_docId :: !Int
...@@ -53,25 +44,32 @@ data TsvDoc = TsvDoc ...@@ -53,25 +44,32 @@ data TsvDoc = TsvDoc
instance FromNamedRecord TsvDoc where instance FromNamedRecord TsvDoc where
parseNamedRecord r = do parseNamedRecord r = do
tsv_title <- r .: "title" <|> r .: "Title" tsv_title <- r .: "Title"
tsv_source <- r .: "source" <|> r .: "Source" tsv_source <- r .: "Source"
tsv_publication_date <- r .: "publication_date" <|> r .: "Publication Date" tsv_publication_date <- r .: "Publication Date"
tsv_abstract <- r .: "abstract" <|> r .: "Abstract" tsv_abstract <- r .: "Abstract"
tsv_authors <- r .: "authors" <|> r .: "Authors" tsv_authors <- r .: "Authors"
pure $ TsvDoc { .. } pure $ TsvDoc { .. }
instance DefaultOrdered TsvDoc where
headerOrder _ = header [ "Publication Date"
, "Authors"
, "Title"
, "Source"
, "Abstract"]
instance ToNamedRecord TsvDoc where instance ToNamedRecord TsvDoc where
toNamedRecord (TsvDoc{ .. }) = toNamedRecord (TsvDoc{ .. }) =
namedRecord [ "title" .= tsv_title namedRecord [ "Title" .= tsv_title
, "source" .= tsv_source , "Source" .= tsv_source
, "publication_date" .= tsv_publication_date , "Publication Date" .= tsv_publication_date
, "abstract" .= tsv_abstract , "Abstract" .= tsv_abstract
, "authors" .= tsv_authors , "Authors" .= tsv_authors
] ]
hyperdataDocument2tsvDoc :: HyperdataDocument -> TsvDoc doc2tsv :: HyperdataDocument -> TsvDoc
hyperdataDocument2tsvDoc h = TsvDoc { tsv_title = m $ _hd_title h doc2tsv h = TsvDoc { tsv_title = m $ _hd_title h
, tsv_source = m $ _hd_source h , tsv_source = m $ _hd_source h
, tsv_publication_date = m $ _hd_publication_date h , tsv_publication_date = m $ _hd_publication_date h
, tsv_abstract = m $ _hd_abstract h , tsv_abstract = m $ _hd_abstract h
......
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