Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
158
Issues
158
List
Board
Labels
Milestones
Merge Requests
10
Merge Requests
10
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
haskell-gargantext
Commits
ae56679c
Commit
ae56679c
authored
Oct 18, 2018
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[DBFLOW] lenses to NodePoly + refacto.
parent
ed24e95d
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
108 additions
and
69 deletions
+108
-69
Main.hs
src/Gargantext/Core/Types/Main.hs
+0
-9
Bashql.hs
src/Gargantext/Database/Bashql.hs
+3
-3
Config.hs
src/Gargantext/Database/Config.hs
+1
-1
Facet.hs
src/Gargantext/Database/Facet.hs
+3
-3
Flow.hs
src/Gargantext/Database/Flow.hs
+1
-1
Node.hs
src/Gargantext/Database/Node.hs
+59
-23
Node.hs
src/Gargantext/Database/Types/Node.hs
+40
-28
TextFlow.hs
src/Gargantext/TextFlow.hs
+1
-1
No files found.
src/Gargantext/Core/Types/Main.hs
View file @
ae56679c
...
...
@@ -87,9 +87,6 @@ data Lists = StopList | MainList | MapList | GroupList
-- | Community Manager Use Case
type
Annuaire
=
NodeCorpus
-- | Favorites Node enable Node categorization
type
Favorites
=
Node
HyperdataFavorites
-- | Favorites Node enable Swap Node with some synonyms for clarity
type
NodeSwap
=
Node
HyperdataResource
...
...
@@ -114,12 +111,6 @@ type TfidfGlobal = Tficf
type
TirankLocal
=
Tficf
type
TirankGlobal
=
Tficf
--
---- | Then a Node can be either a Graph or a Phylo or a Notebook
type
Graph
=
Node
HyperdataGraph
type
Phylo
=
Node
HyperdataPhylo
type
Notebook
=
Node
HyperdataNotebook
-- Temporary types to be removed
type
ErrorMessage
=
Text
...
...
src/Gargantext/Database/Bashql.hs
View file @
ae56679c
...
...
@@ -109,7 +109,7 @@ get pwd = Cmd . ReaderT $ \conn -> runQuery conn $ selectNodesWithParentID (last
-- | Home, need to filter with UserId
home
::
Cmd
PWD
home
=
map
node_id
<$>
Cmd
(
ReaderT
(
getNodesWithParentId
0
Nothing
))
home
=
map
_
node_id
<$>
Cmd
(
ReaderT
(
getNodesWithParentId
0
Nothing
))
-- | ls == get Children
ls
::
PWD
->
Cmd
[
Node
Value
]
...
...
@@ -118,14 +118,14 @@ ls = get
tree
::
PWD
->
Cmd
[
Node
Value
]
tree
p
=
do
ns
<-
get
p
children
<-
mapM
(
\
n
->
get
[
node_id
n
])
ns
children
<-
mapM
(
\
n
->
get
[
_
node_id
n
])
ns
pure
$
ns
<>
concat
children
-- | TODO
post
::
PWD
->
[
NodeWrite'
]
->
Cmd
Int64
post
[]
_
=
pure
0
post
_
[]
=
pure
0
post
pth
ns
=
Cmd
.
ReaderT
$
insertNode
(
Just
$
last
pth
)
ns
post
pth
ns
=
Cmd
.
ReaderT
$
insertNode
sWithParent
(
Just
$
last
pth
)
ns
--postR :: PWD -> [NodeWrite'] -> Cmd [Int]
--postR [] _ _ = pure [0]
...
...
src/Gargantext/Database/Config.hs
View file @
ae56679c
...
...
@@ -47,7 +47,7 @@ nodeTypeId n =
-- MapList -> 8
---- Scores
NodeOccurrences
->
10
--
NodeOccurrences -> 10
NodeGraph
->
9
NodeDashboard
->
5
NodeChart
->
51
...
...
src/Gargantext/Database/Facet.hs
View file @
ae56679c
...
...
@@ -220,8 +220,8 @@ leftJoin3''' = leftJoin3 queryNodeNodeTable queryNodeTable queryNodeTable cond12
selectDocFacet'
::
NodeType
->
ParentId
->
Maybe
NodeType
->
Query
FacetDocRead
selectDocFacet'
_
pId
_
=
proc
()
->
do
(
n1
,(
nn
,
n2
))
<-
leftJoin3'''
-<
()
restrict
-<
(
.&&
)
(
node_parentId
n1
.==
(
toNullable
$
pgInt4
pId
))
(
node_typename
n1
.==
(
pgInt4
$
nodeTypeId
NodeDocument
))
restrict
-<
(
.&&
)
(
_
node_parentId
n1
.==
(
toNullable
$
pgInt4
pId
))
(
_
node_typename
n1
.==
(
pgInt4
$
nodeTypeId
NodeDocument
))
-- restrict -< (.||) (node_typename n2 .== (toNullable $ pgInt4 $ nodeTypeId Favorites))
-- (isNull $ node_typename n2)
...
...
@@ -231,6 +231,6 @@ selectDocFacet' _ pId _ = proc () -> do
let
isFav
=
ifThenElse
(
isNull
$
nodeNode_score
nn
)
(
pgBool
False
)
(
pgBool
True
)
returnA
-<
FacetDoc
(
node_id
n1
)
(
node_date
n1
)
(
node_hyperdata
n1
)
(
isFav
)
(
pgInt4
1
)
returnA
-<
FacetDoc
(
_node_id
n1
)
(
_node_date
n1
)
(
_
node_hyperdata
n1
)
(
isFav
)
(
pgInt4
1
)
src/Gargantext/Database/Flow.hs
View file @
ae56679c
...
...
@@ -48,7 +48,7 @@ flow = do
Nothing
->
panic
"Error: User does not exist (yet)"
-- mk NodeUser gargantua_id "Node Gargantua"
Just
user
->
userLight_id
user
root
<-
map
node_id
<$>
runCmd'
(
getRoot
masterUserId
)
root
<-
map
_
node_id
<$>
runCmd'
(
getRoot
masterUserId
)
root'
<-
case
root
of
[]
->
runCmd'
(
mkRoot
masterUserId
)
...
...
src/Gargantext/Database/Node.hs
View file @
ae56679c
...
...
@@ -25,6 +25,7 @@ module Gargantext.Database.Node where
import
Data.Text
(
pack
)
import
GHC.Int
(
Int64
)
import
Control.Lens
(
set
)
import
Data.Maybe
import
Data.Time
(
UTCTime
)
import
Database.PostgreSQL.Simple.FromField
(
Conversion
...
...
@@ -86,6 +87,7 @@ mkCmd = Cmd . ReaderT
------------------------------------------------------------------------
type
CorpusId
=
Int
type
AnnuaireId
=
Int
type
UserId
=
NodeId
type
TypeId
=
Int
------------------------------------------------------------------------
...
...
@@ -129,13 +131,13 @@ $(makeLensesWith abbreviatedFields ''NodePoly)
nodeTable
::
Table
NodeWrite
NodeRead
nodeTable
=
Table
"nodes"
(
pNode
Node
{
node_id
=
optional
"id"
,
node_typename
=
required
"typename"
,
node_userId
=
required
"user_id"
,
node_parentId
=
required
"parent_id"
,
node_name
=
required
"name"
,
node_date
=
optional
"date"
,
node_hyperdata
=
required
"hyperdata"
nodeTable
=
Table
"nodes"
(
pNode
Node
{
_
node_id
=
optional
"id"
,
_
node_typename
=
required
"typename"
,
_
node_userId
=
required
"user_id"
,
_
node_parentId
=
required
"parent_id"
,
_
node_name
=
required
"name"
,
_
node_date
=
optional
"date"
,
_
node_hyperdata
=
required
"hyperdata"
-- , node_titleAbstract = optional "title_abstract"
}
)
...
...
@@ -175,7 +177,7 @@ queryNodeTable = queryTable nodeTable
selectNode
::
Column
PGInt4
->
Query
NodeRead
selectNode
id
=
proc
()
->
do
row
<-
queryNodeTable
-<
()
restrict
-<
node_id
row
.==
id
restrict
-<
_
node_id
row
.==
id
returnA
-<
row
runGetNodes
::
Query
NodeRead
->
Cmd
[
Node
Value
]
...
...
@@ -185,8 +187,8 @@ runGetNodes q = mkCmd $ \conn -> runQuery conn q
selectRootUser
::
UserId
->
Query
NodeRead
selectRootUser
userId
=
proc
()
->
do
row
<-
queryNodeTable
-<
()
restrict
-<
node_userId
row
.==
(
pgInt4
userId
)
restrict
-<
node_typename
row
.==
(
pgInt4
$
nodeTypeId
NodeUser
)
restrict
-<
_
node_userId
row
.==
(
pgInt4
userId
)
restrict
-<
_
node_typename
row
.==
(
pgInt4
$
nodeTypeId
NodeUser
)
returnA
-<
row
getRoot
::
UserId
->
Cmd
[
Node
HyperdataUser
]
...
...
@@ -199,7 +201,7 @@ selectNodesWith :: ParentId -> Maybe NodeType
->
Maybe
Offset
->
Maybe
Limit
->
Query
NodeRead
selectNodesWith
parentId
maybeNodeType
maybeOffset
maybeLimit
=
--offset' maybeOffset $ limit' maybeLimit $ orderBy (asc (hyperdataDocument_Publication_date . node_hyperdata)) $ selectNodesWith' parentId typeId
limit'
maybeLimit
$
offset'
maybeOffset
$
orderBy
(
asc
node_id
)
$
selectNodesWith'
parentId
maybeNodeType
limit'
maybeLimit
$
offset'
maybeOffset
$
orderBy
(
asc
_
node_id
)
$
selectNodesWith'
parentId
maybeNodeType
selectNodesWith'
::
ParentId
->
Maybe
NodeType
->
Query
NodeRead
selectNodesWith'
parentId
maybeNodeType
=
proc
()
->
do
...
...
@@ -290,8 +292,9 @@ getNodesWithType conn type_id = do
------------------------------------------------------------------------
-- WIP
-- TODO Classe HasDefault where
-- default NodeType = Hyperdata
------------------------------------------------------------------------
type
NodeWrite'
=
NodePoly
(
Maybe
Int
)
Int
Int
(
Maybe
ParentId
)
Text
(
Maybe
UTCTime
)
ByteString
------------------------------------------------------------------------
defaultUser
::
HyperdataUser
...
...
@@ -320,7 +323,7 @@ nodeCorpusW maybeName maybeCorpus pId = node NodeCorpus name (Hyperdata corpus)
where
name
=
maybe
"Corpus"
identity
maybeName
corpus
=
maybe
defaultCorpus
identity
maybeCorpus
----------------------------------------------
--------------------------
--------------------------
defaultDocument
::
HyperdataDocument
defaultDocument
=
hyperdataDocument
...
...
@@ -330,11 +333,24 @@ nodeDocumentW maybeName maybeDocument cId = node NodeDocument name (Hyperdata do
name
=
maybe
"Document"
identity
maybeName
doc
=
maybe
defaultDocument
identity
maybeDocument
------------------------------------------------------------------------
--defaultAnnuaire :: HyperdataAnnuaire
--defaultAnnuaire = HyperdataAnnuaire
--nodeAnnuaireW
--nodeContactW
defaultAnnuaire
::
HyperdataAnnuaire
defaultAnnuaire
=
HyperdataAnnuaire
(
Just
"Title"
)
(
Just
"Description"
)
nodeAnnuaireW
::
Maybe
Name
->
Maybe
HyperdataAnnuaire
->
ParentId
->
UserId
->
NodeWrite'
nodeAnnuaireW
maybeName
maybeAnnuaire
pId
=
node
NodeAnnuaire
name
(
Hyperdata
annuaire
)
(
Just
pId
)
where
name
=
maybe
"Annuaire"
identity
maybeName
annuaire
=
maybe
defaultAnnuaire
identity
maybeAnnuaire
--------------------------
defaultContact
::
HyperdataContact
defaultContact
=
HyperdataContact
(
Just
"Name"
)
(
Just
"email@here"
)
nodeContactW
::
Maybe
Name
->
Maybe
HyperdataContact
->
AnnuaireId
->
UserId
->
NodeWrite'
nodeContactW
maybeName
maybeContact
aId
=
node
NodeContact
name
(
Hyperdata
contact
)
(
Just
aId
)
where
name
=
maybe
"Contact"
identity
maybeName
contact
=
maybe
defaultContact
identity
maybeContact
------------------------------------------------------------------------
------------------------------------------------------------------------
node
::
ToJSON
a
=>
NodeType
->
Name
->
Hyperdata
a
->
Maybe
ParentId
->
UserId
->
NodeWrite'
node
nodeType
name
hyperData
parentId
userId
=
Node
Nothing
typeId
userId
parentId
name
Nothing
byteData
...
...
@@ -342,7 +358,7 @@ node nodeType name hyperData parentId userId = Node Nothing typeId userId parent
typeId
=
nodeTypeId
nodeType
byteData
=
DB
.
pack
$
DBL
.
unpack
$
encode
$
unHyperdata
hyperData
------------------------------------------------------------------------
node2write
::
(
Functor
maybe1
,
Functor
maybe2
,
Functor
maybe3
)
=>
maybe1
Int
->
NodePoly
(
maybe2
Int
)
Int
Int
parentId
Text
(
maybe3
UTCTime
)
ByteString
->
(
maybe2
(
Column
PGInt4
),
Column
PGInt4
,
Column
PGInt4
,
...
...
@@ -356,12 +372,32 @@ node2write pid (Node id tn ud _ nm dt hp) = ((pgInt4 <$> id)
,(
pgUTCTime
<$>
dt
)
,(
pgStrictJSONB
hp
)
)
node2row
::
(
Functor
maybe1
,
Functor
maybe2
,
Functor
maybe3
)
=>
NodePoly
(
maybe2
Int
)
Int
Int
(
maybe1
Int
)
Text
(
maybe3
UTCTime
)
ByteString
->
(
maybe2
(
Column
PGInt4
),
Column
PGInt4
,
Column
PGInt4
,
maybe1
(
Column
PGInt4
)
,
Column
PGText
,
maybe3
(
Column
PGTimestamptz
),
Column
PGJsonb
)
node2row
(
Node
id
tn
ud
pid
nm
dt
hp
)
=
((
pgInt4
<$>
id
)
,(
pgInt4
tn
)
,(
pgInt4
ud
)
,(
pgInt4
<$>
pid
)
,(
pgStrictText
nm
)
,(
pgUTCTime
<$>
dt
)
,(
pgStrictJSONB
hp
)
)
------------------------------------------------------------------------
insertNode
::
Maybe
ParentId
->
[
NodeWrite'
]
->
Connection
->
IO
Int64
insertNode
pid
ns
conn
=
runInsertMany
conn
nodeTable'
$
map
(
node2write
pid
)
ns
insertNodes
::
[
NodeWrite'
]
->
Connection
->
IO
Int64
insertNodes
ns
conn
=
runInsertMany
conn
nodeTable'
(
map
node2row
ns
)
insertNodesR
::
[
NodeWrite'
]
->
Connection
->
IO
[
Int
]
insertNodesR
ns
conn
=
runInsertManyReturning
conn
nodeTable'
(
map
node2row
ns
)
(
\
(
i
,
_
,
_
,
_
,
_
,
_
,
_
)
->
i
)
-------------------------
insertNodesWithParent
::
Maybe
ParentId
->
[
NodeWrite'
]
->
Connection
->
IO
Int64
insertNodesWithParent
pid
ns
conn
=
insertNodes
(
map
(
set
node_parentId
pid
)
ns
)
conn
insertNodeR
::
Maybe
ParentId
->
[
NodeWrite'
]
->
Connection
->
IO
[
Int
]
insertNode
R
pid
ns
conn
=
runInsertManyReturning
conn
nodeTable'
(
map
(
node2write
pid
)
ns
)
(
\
(
i
,
_
,
_
,
_
,
_
,
_
,
_
)
->
i
)
insertNode
sWithParent
R
::
Maybe
ParentId
->
[
NodeWrite'
]
->
Connection
->
IO
[
Int
]
insertNode
sWithParentR
pid
ns
conn
=
insertNodesR
(
map
(
set
node_parentId
pid
)
ns
)
conn
------------------------------------------------------------------------
-- TODO Hierachy of Nodes
-- post and get same types Node' and update if changes
...
...
@@ -448,7 +484,7 @@ mk :: Connection -> NodeType -> Maybe ParentId -> Text -> IO [Int]
mk
c
nt
pId
name
=
mk'
c
nt
userId
pId
name
mk'
::
Connection
->
NodeType
->
UserId
->
Maybe
ParentId
->
Text
->
IO
[
Int
]
mk'
c
nt
uId
pId
name
=
map
fromIntegral
<$>
insertNodeR
pId
[
node
nt
name
hd
pId
uId
]
c
mk'
c
nt
uId
pId
name
=
map
fromIntegral
<$>
insertNode
sWithParent
R
pId
[
node
nt
name
hd
pId
uId
]
c
where
hd
=
Hyperdata
(
HyperdataUser
(
Just
$
(
pack
.
show
)
EN
))
...
...
src/Gargantext/Database/Types/Node.hs
View file @
ae56679c
...
...
@@ -97,8 +97,6 @@ data HyperdataDocumentV3 = HyperdataDocumentV3 { hyperdataDocumentV3_publication
,
hyperdataDocumentV3_title
::
Maybe
Text
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataDocumentV3_"
)
''
H
yperdataDocumentV3
)
------------------------------------------------------------------------
data
HyperdataDocument
=
HyperdataDocument
{
_hyperdataDocument_bdd
::
Maybe
Text
...
...
@@ -194,26 +192,36 @@ instance Arbitrary Resource where
data
Hyperdata
a
=
Hyperdata
{
unHyperdata
::
a
}
$
(
deriveJSON
(
unPrefix
""
)
''
H
yperdata
)
data
HyperdataCorpus
=
HyperdataCorpus
{
hyperdataCorpus_title
::
Maybe
Text
,
hyperdataCorpus_descr
::
Maybe
Text
,
hyperdataCorpus_query
::
Maybe
Text
,
hyperdataCorpus_authors
::
Maybe
Text
,
hyperdataCorpus_resources
::
Maybe
[
Resource
]
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataCorpus_"
)
''
H
yperdataCorpus
)
data
HyperdataUser
=
HyperdataUser
{
hyperdataUser_language
::
Maybe
Text
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataUser_"
)
''
H
yperdataUser
)
-- Preferences ?
data
HyperdataFolder
=
HyperdataFolder
{
hyperdataFolder_descr
::
Maybe
Text
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataFolder_"
)
''
H
yperdataFolder
)
data
HyperdataCorpus
=
HyperdataCorpus
{
hyperdataCorpus_title
::
Maybe
Text
,
hyperdataCorpus_descr
::
Maybe
Text
,
hyperdataCorpus_query
::
Maybe
Text
,
hyperdataCorpus_authors
::
Maybe
Text
,
hyperdataCorpus_resources
::
Maybe
[
Resource
]
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataCorpus_"
)
''
H
yperdataCorpus
)
------------------------------------------------------------------------
data
HyperdataAnnuaire
=
HyperdataAnnuaire
{
hyperdataAnnuaire_title
::
Maybe
Text
,
hyperdataAnnuaire_descr
::
Maybe
Text
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataAnnuaire_"
)
''
H
yperdataAnnuaire
)
------------------------------------------------------------------------
data
HyperdataContact
=
HyperdataContact
{
hyperdataContact_name
::
Maybe
Text
,
hyperdataContact_mail
::
Maybe
Text
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataContact_"
)
''
H
yperdataContact
)
------------------------------------------------------------------------
data
HyperdataList
=
HyperdataList
{
hyperdataList_preferences
::
Maybe
Text
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataList_"
)
''
H
yperdataList
)
...
...
@@ -223,10 +231,6 @@ data HyperdataScore = HyperdataScore { hyperdataScore_preferences :: Maybe Tex
$
(
deriveJSON
(
unPrefix
"hyperdataScore_"
)
''
H
yperdataScore
)
data
HyperdataFavorites
=
HyperdataFavorites
{
hyperdataFavorites_preferences
::
Maybe
Text
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataFavorites_"
)
''
H
yperdataFavorites
)
data
HyperdataResource
=
HyperdataResource
{
hyperdataResource_preferences
::
Maybe
Text
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"hyperdataResource_"
)
''
H
yperdataResource
)
...
...
@@ -267,16 +271,25 @@ type NodeName = Text
-- | Then a Node can be either a Folder or a Corpus or a Document
type
NodeUser
=
Node
HyperdataUser
type
NodeFolder
=
Node
HyperdataFolder
type
NodeCorpus
=
Node
HyperdataCorpus
type
NodeCorpusV3
=
Node
HyperdataCorpus
type
NodeDocument
=
Node
HyperdataDocument
type
NodeAnnuaire
=
Node
HyperdataAnnuaire
type
NodeContact
=
Node
HyperdataContact
---- | Then a Node can be either a Graph or a Phylo or a Notebook
type
NodeGraph
=
Node
HyperdataGraph
type
NodePhylo
=
Node
HyperdataPhylo
type
NodeNotebook
=
Node
HyperdataNotebook
------------------------------------------------------------------------
data
NodeType
=
NodeUser
|
NodeFolder
|
NodeCorpus
|
NodeCorpusV3
|
NodeDocument
|
NodeAnnuaire
|
NodeContact
|
NodeOccurrences
--
| NodeOccurrences
|
NodeGraph
|
NodeDashboard
|
NodeChart
-- | Classification
...
...
@@ -298,18 +311,17 @@ instance ToParamSchema NodeType
instance
ToSchema
NodeType
------------------------------------------------------------------------
data
NodePoly
id
typename
userId
parentId
name
date
hyperdata
=
Node
{
node_id
::
id
,
node_typename
::
typename
,
node_userId
::
userId
-- , nodeHashId :: hashId
,
node_parentId
::
parentId
,
node_name
::
name
,
node_date
::
date
,
node_hyperdata
::
hyperdata
-- , node_titleAbstract :: titleAbstract
data
NodePoly
id
typename
userId
parentId
name
date
hyperdata
=
Node
{
_node_id
::
id
,
_node_typename
::
typename
,
_node_userId
::
userId
-- , nodeUniqId :: hashId
,
_node_parentId
::
parentId
,
_node_name
::
name
,
_node_date
::
date
,
_node_hyperdata
::
hyperdata
}
deriving
(
Show
,
Generic
)
$
(
deriveJSON
(
unPrefix
"node_"
)
''
N
odePoly
)
$
(
deriveJSON
(
unPrefix
"
_
node_"
)
''
N
odePoly
)
$
(
makeLenses
''
N
odePoly
)
...
...
src/Gargantext/TextFlow.hs
View file @
ae56679c
...
...
@@ -85,7 +85,7 @@ textFlow termType workType = do
FullText
path
->
splitBy
(
Sentences
5
)
<$>
readFile
path
CSV
path
->
readCsvOn
[
csv_title
,
csv_abstract
]
path
Contexts
ctxt
->
pure
ctxt
DB
con
corpusId
->
catMaybes
<$>
map
(
\
n
->
hyperdataDocumentV3_title
(
node_hyperdata
n
)
<>
hyperdataDocumentV3_abstract
(
node_hyperdata
n
))
<$>
getDocumentsV3WithParentId
con
corpusId
DB
con
corpusId
->
catMaybes
<$>
map
(
\
n
->
hyperdataDocumentV3_title
(
_node_hyperdata
n
)
<>
hyperdataDocumentV3_abstract
(
_
node_hyperdata
n
))
<$>
getDocumentsV3WithParentId
con
corpusId
_
->
undefined
-- TODO Query not supported
textFlow'
termType
contexts
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment