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