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
153
Issues
153
List
Board
Labels
Milestones
Merge Requests
7
Merge Requests
7
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
ee0a337c
Commit
ee0a337c
authored
Apr 29, 2025
by
Alfredo Di Napoli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WIP3
parent
8a63378a
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
141 additions
and
128 deletions
+141
-128
Tools.hs
src/Gargantext/API/Ngrams/Tools.hs
+18
-17
Utils.hs
src/Gargantext/API/Node/Corpus/Export/Utils.hs
+50
-46
Share.hs
src/Gargantext/API/Node/Share.hs
+13
-2
Types.hs
src/Gargantext/Core/NodeStory/Types.hs
+1
-1
Delete.hs
src/Gargantext/Database/Action/Delete.hs
+7
-5
Share.hs
src/Gargantext/Database/Action/Share.hs
+13
-13
NodeNode.hs
src/Gargantext/Database/Query/Table/NodeNode.hs
+39
-44
No files found.
src/Gargantext/API/Ngrams/Tools.hs
View file @
ee0a337c
...
@@ -29,6 +29,7 @@ import Gargantext.Core.NodeStory.Types
...
@@ -29,6 +29,7 @@ import Gargantext.Core.NodeStory.Types
import
Gargantext.Core.Text.Ngrams
(
NgramsType
)
import
Gargantext.Core.Text.Ngrams
(
NgramsType
)
import
Gargantext.Core.Types.Main
(
ListType
(
..
)
)
import
Gargantext.Core.Types.Main
(
ListType
(
..
)
)
import
Gargantext.Database.Admin.Types.Node
(
NodeId
,
ListId
)
import
Gargantext.Database.Admin.Types.Node
(
NodeId
,
ListId
)
import
Gargantext.Database.Prelude
import
Gargantext.Prelude
import
Gargantext.Prelude
...
@@ -39,10 +40,10 @@ type RootTerm = NgramsTerm
...
@@ -39,10 +40,10 @@ type RootTerm = NgramsTerm
getRepo
::
HasNodeStory
env
err
m
getRepo
::
HasNodeStory
env
err
m
=>
[
ListId
]
->
m
NodeListStory
=>
[
ListId
]
->
m
(
DBQuery
err
x
NodeListStory
)
getRepo
listIds
=
do
getRepo
listIds
=
do
f
<-
getNodeListStoryMulti
f
<-
getNodeListStoryMulti
liftBas
e
$
f
listIds
pur
e
$
f
listIds
-- v <- liftBase $ f listIds
-- v <- liftBase $ f listIds
-- v' <- liftBase $ atomically $ readTVar v
-- v' <- liftBase $ atomically $ readTVar v
-- pure $ v'
-- pure $ v'
...
@@ -58,24 +59,23 @@ repoSize repo node_id = Map.map Map.size state'
...
@@ -58,24 +59,23 @@ repoSize repo node_id = Map.map Map.size state'
.
a_state
.
a_state
getNodeStory
::
HasNodeStory
env
err
m
getNodeStory
::
HasNodeStory
env
err
m
=>
ListId
->
m
(
DBQuery
err
x
ArchiveList
)
=>
ListId
->
m
ArchiveList
getNodeStory
l
=
do
getNodeStory
l
=
do
f
<-
getNodeListStory
f
<-
getNodeListStory
liftBas
e
$
f
l
pur
e
$
f
l
-- v <- liftBase $ f l
-- v <- liftBase $ f l
-- pure v
-- pure v
getNodeListStory
::
HasNodeStory
env
err
m
getNodeListStory
::
HasNodeStory
env
err
m
=>
m
(
NodeId
->
IO
ArchiveList
)
=>
m
(
NodeId
->
DBQuery
err
x
ArchiveList
)
getNodeListStory
=
do
getNodeListStory
=
do
env
<-
view
hasNodeStory
env
<-
view
hasNodeStory
pure
$
view
nse_getter
env
pure
$
view
nse_getter
env
getNodeListStoryMulti
::
HasNodeStory
env
err
m
getNodeListStoryMulti
::
HasNodeStory
env
err
m
=>
m
([
NodeId
]
->
IO
NodeListStory
)
=>
m
([
NodeId
]
->
DBQuery
err
x
NodeListStory
)
getNodeListStoryMulti
=
do
getNodeListStoryMulti
=
do
env
<-
view
hasNodeStory
env
<-
view
hasNodeStory
pure
$
view
nse_getter_multi
env
pure
$
view
nse_getter_multi
env
...
@@ -104,23 +104,24 @@ listNgramsFromRepo nodeIds ngramsType repo =
...
@@ -104,23 +104,24 @@ listNgramsFromRepo nodeIds ngramsType repo =
-- be properly guarded.
-- be properly guarded.
getListNgrams
::
HasNodeStory
env
err
m
getListNgrams
::
HasNodeStory
env
err
m
=>
[
ListId
]
->
NgramsType
=>
[
ListId
]
->
NgramsType
->
m
(
HashMap
NgramsTerm
NgramsRepoElement
)
->
m
(
DBQuery
err
x
(
HashMap
NgramsTerm
NgramsRepoElement
)
)
getListNgrams
nodeIds
ngramsType
=
listNgramsFromRepo
nodeIds
ngramsType
getListNgrams
nodeIds
ngramsType
=
fmap
(
listNgramsFromRepo
nodeIds
ngramsType
)
<$>
getRepo
nodeIds
<$>
getRepo
nodeIds
-- | Fetch terms from repo, gathering terms under the same root (parent).
-- | Fetch terms from repo, gathering terms under the same root (parent).
getTermsWith
::
forall
a
env
err
m
.
getTermsWith
::
forall
a
env
err
m
x
.
(
HasNodeStory
env
err
m
,
Eq
a
,
Hashable
a
)
(
HasNodeStory
env
err
m
,
Eq
a
,
Hashable
a
)
=>
(
NgramsTerm
->
a
)
->
[
ListId
]
=>
(
NgramsTerm
->
a
)
->
[
ListId
]
->
NgramsType
->
Set
ListType
->
NgramsType
->
Set
ListType
->
m
(
HashMap
a
[
a
])
->
m
(
DBQuery
err
x
(
HashMap
a
[
a
]))
getTermsWith
f
ls
ngt
lts
=
HM
.
fromListWith
(
<>
)
getTermsWith
f
ls
ngt
lts
=
<$>
map
toTreeWith
let
func
=
HM
.
fromListWith
(
<>
)
<$>
HM
.
toList
.
map
toTreeWith
<$>
HM
.
filter
(
\
f'
->
Set
.
member
(
fst
f'
)
lts
)
.
HM
.
toList
<$>
mapTermListRoot
ls
ngt
.
HM
.
filter
(
\
f'
->
Set
.
member
(
fst
f'
)
lts
)
<$>
getRepo
ls
.
mapTermListRoot
ls
ngt
in
fmap
func
<$>
getRepo
ls
where
where
toTreeWith
::
(
NgramsTerm
,
(
b
,
Maybe
NgramsTerm
))
->
(
a
,
[
a
])
toTreeWith
::
(
NgramsTerm
,
(
b
,
Maybe
NgramsTerm
))
->
(
a
,
[
a
])
toTreeWith
(
t
,
(
_lt
,
maybeRoot
))
=
case
maybeRoot
of
toTreeWith
(
t
,
(
_lt
,
maybeRoot
))
=
case
maybeRoot
of
...
...
src/Gargantext/API/Node/Corpus/Export/Utils.hs
View file @
ee0a337c
This diff is collapsed.
Click to expand it.
src/Gargantext/API/Node/Share.hs
View file @
ee0a337c
...
@@ -72,10 +72,21 @@ api userInviting nId (ShareTeamParams user') = do
...
@@ -72,10 +72,21 @@ api userInviting nId (ShareTeamParams user') = do
pure
()
pure
()
pure
u
pure
u
fromIntegral
<$>
DB
.
shareNodeWith
(
ShareNodeWith_User
NodeFolderShared
(
UserName
user
))
nId
fromIntegral
<$>
shareNodeAndNotify
(
ShareNodeWith_User
NodeFolderShared
(
UserName
user
))
nId
api
_uId
nId2
(
SharePublicParams
nId1
)
=
api
_uId
nId2
(
SharePublicParams
nId1
)
=
fromIntegral
<$>
DB
.
shareNodeWith
(
ShareNodeWith_Node
NodeFolderPublic
nId1
)
nId2
fromIntegral
<$>
shareNodeAndNotify
(
ShareNodeWith_Node
NodeFolderPublic
nId1
)
nId2
shareNodeAndNotify
::
(
HasNodeError
err
,
IsDBCmdExtra
env
err
m
,
MonadRandom
m
)
->
DBUpdate
err
(
Int
,
[
CEMessage
])
->
m
Int
shareNodeAndNotify
dbTx
=
do
(
res
,
msgs
)
<-
runDbTx
dbTx
forM_
msgs
CE
.
ce_notify
pure
res
-- | Unshare a previously shared node via the /share endpoint.
-- | Unshare a previously shared node via the /share endpoint.
unShare
::
IsGargServer
env
err
m
=>
NodeId
->
Named
.
UnshareNode
(
AsServerT
m
)
unShare
::
IsGargServer
env
err
m
=>
NodeId
->
Named
.
UnshareNode
(
AsServerT
m
)
...
...
src/Gargantext/Core/NodeStory/Types.hs
View file @
ee0a337c
...
@@ -204,7 +204,7 @@ type HasNodeStory env err m = ( IsDBCmd env err m
...
@@ -204,7 +204,7 @@ type HasNodeStory env err m = ( IsDBCmd env err m
)
)
class
(
HasNodeStoryImmediateSaver
err
env
)
class
(
HasNodeStoryImmediateSaver
err
env
)
=>
HasNodeStoryEnv
e
rr
env
where
=>
HasNodeStoryEnv
e
nv
err
where
hasNodeStory
::
Getter
env
(
NodeStoryEnv
err
)
hasNodeStory
::
Getter
env
(
NodeStoryEnv
err
)
class
HasNodeStoryImmediateSaver
err
env
where
class
HasNodeStoryImmediateSaver
err
env
where
...
...
src/Gargantext/Database/Action/Delete.hs
View file @
ee0a337c
...
@@ -27,7 +27,7 @@ import Gargantext.Database.Action.User (getUserId)
...
@@ -27,7 +27,7 @@ import Gargantext.Database.Action.User (getUserId)
import
Gargantext.Database.Admin.Types.Hyperdata.File
(
HyperdataFile
(
..
)
)
import
Gargantext.Database.Admin.Types.Hyperdata.File
(
HyperdataFile
(
..
)
)
import
Gargantext.Database.Admin.Types.Node
(
NodeId
,
NodeType
(
..
)
)
-- (NodeType(..))
import
Gargantext.Database.Admin.Types.Node
(
NodeId
,
NodeType
(
..
)
)
-- (NodeType(..))
import
Gargantext.Database.GargDB
qualified
as
GargDB
import
Gargantext.Database.GargDB
qualified
as
GargDB
import
Gargantext.Database.Prelude
(
Cmd
,
IsDBEnvExtra
)
import
Gargantext.Database.Prelude
import
Gargantext.Database.Query.Table.Node
(
getNodeWith
)
import
Gargantext.Database.Query.Table.Node
(
getNodeWith
)
import
Gargantext.Database.Query.Table.Node
qualified
as
N
(
getNode
,
deleteNode
)
import
Gargantext.Database.Query.Table.Node
qualified
as
N
(
getNode
,
deleteNode
)
import
Gargantext.Database.Query.Table.Node.Error
(
HasNodeError
)
import
Gargantext.Database.Query.Table.Node.Error
(
HasNodeError
)
...
@@ -38,16 +38,18 @@ import Gargantext.Prelude
...
@@ -38,16 +38,18 @@ import Gargantext.Prelude
-- TODO
-- TODO
-- Delete Corpus children accoring its types
-- Delete Corpus children accoring its types
-- Delete NodeList (NodeStory + cbor file)
-- Delete NodeList (NodeStory + cbor file)
deleteNode
::
(
IsDBEnvExtra
env
,
HasNodeError
err
)
-- FIXME(adinapoli): this function mixes db queries with side effects, we can
-- probably make it more compositional.
deleteNode
::
(
HasNodeError
err
)
=>
User
=>
User
->
NodeId
->
NodeId
->
Cmd
env
err
Int
->
DBCmd
err
Int
deleteNode
u
nodeId
=
do
deleteNode
u
nodeId
=
do
node'
<-
N
.
getNode
nodeId
node'
<-
runDBQuery
$
N
.
getNode
nodeId
num
<-
case
(
view
node_typename
node'
)
of
num
<-
case
(
view
node_typename
node'
)
of
nt
|
nt
==
toDBid
NodeUser
->
panicTrace
"[G.D.A.D.deleteNode] Not allowed to delete NodeUser (yet)"
nt
|
nt
==
toDBid
NodeUser
->
panicTrace
"[G.D.A.D.deleteNode] Not allowed to delete NodeUser (yet)"
nt
|
nt
==
toDBid
NodeTeam
->
do
nt
|
nt
==
toDBid
NodeTeam
->
do
uId
<-
getUserId
u
uId
<-
runDBQuery
$
getUserId
u
if
_node_user_id
node'
==
uId
if
_node_user_id
node'
==
uId
then
N
.
deleteNode
nodeId
then
N
.
deleteNode
nodeId
else
delFolderTeam
u
nodeId
else
delFolderTeam
u
nodeId
...
...
src/Gargantext/Database/Action/Share.hs
View file @
ee0a337c
...
@@ -44,7 +44,7 @@ data ShareNodeWith = ShareNodeWith_User !NodeType !User
...
@@ -44,7 +44,7 @@ data ShareNodeWith = ShareNodeWith_User !NodeType !User
|
ShareNodeWith_Node
!
NodeType
!
NodeId
|
ShareNodeWith_Node
!
NodeType
!
NodeId
------------------------------------------------------------------------
------------------------------------------------------------------------
deleteMemberShip
::
HasNodeError
err
=>
[(
SharedFolderId
,
TeamNodeId
)]
->
DB
CmdExtra
err
[
Int
]
deleteMemberShip
::
HasNodeError
err
=>
[(
SharedFolderId
,
TeamNodeId
)]
->
DB
Update
err
[
Int
]
deleteMemberShip
xs
=
mapM
(
\
(
s
,
t
)
->
deleteNodeNode
s
t
)
xs
deleteMemberShip
xs
=
mapM
(
\
(
s
,
t
)
->
deleteNodeNode
s
t
)
xs
------------------------------------------------------------------------
------------------------------------------------------------------------
...
@@ -56,9 +56,9 @@ type TeamNodeId = NodeId
...
@@ -56,9 +56,9 @@ type TeamNodeId = NodeId
-- Result gives the username and its SharedFolderId that has to be eventually
-- Result gives the username and its SharedFolderId that has to be eventually
-- used for the membership
-- used for the membership
membersOf
::
HasNodeError
err
membersOf
::
HasNodeError
err
=>
TeamNodeId
->
DB
CmdExtra
err
[(
Text
,
SharedFolderId
)]
=>
TeamNodeId
->
DB
Query
err
x
[(
Text
,
SharedFolderId
)]
membersOf
nId
=
do
membersOf
nId
=
do
res
<-
run
OpaQuery
$
membersOfQuery
nId
res
<-
mk
OpaQuery
$
membersOfQuery
nId
pure
$
catMaybes
(
uncurryMaybe
<$>
res
)
pure
$
catMaybes
(
uncurryMaybe
<$>
res
)
...
@@ -91,7 +91,9 @@ shareNodeWith :: HasNodeError err
...
@@ -91,7 +91,9 @@ shareNodeWith :: HasNodeError err
->
NodeId
->
NodeId
-- ^ The target node we would like to share, it has
-- ^ The target node we would like to share, it has
-- to be a 'NodeFolderShared'.
-- to be a 'NodeFolderShared'.
->
DBCmdExtra
err
Int
->
DBUpdate
err
(
Int
,
[
CE
.
CEMessage
])
-- ^ Returns as the second argument the list of messages
-- we need to submit to the central exchange.
shareNodeWith
(
ShareNodeWith_User
NodeFolderShared
u
)
n
=
do
shareNodeWith
(
ShareNodeWith_User
NodeFolderShared
u
)
n
=
do
nodeToCheck
<-
getNode
n
nodeToCheck
<-
getNode
n
userIdCheck
<-
getUserId
u
userIdCheck
<-
getUserId
u
...
@@ -103,9 +105,8 @@ shareNodeWith (ShareNodeWith_User NodeFolderShared u) n = do
...
@@ -103,9 +105,8 @@ shareNodeWith (ShareNodeWith_User NodeFolderShared u) n = do
else
do
else
do
folderSharedId
<-
getFolderId
u
NodeFolderShared
folderSharedId
<-
getFolderId
u
NodeFolderShared
ret
<-
shareNode
(
SourceId
folderSharedId
)
(
TargetId
n
)
ret
<-
shareNode
(
SourceId
folderSharedId
)
(
TargetId
n
)
void
$
CE
.
ce_notify
$
CE
.
UpdateTreeFirstLevel
folderSharedId
let
msgs
=
[
CE
.
UpdateTreeFirstLevel
folderSharedId
,
CE
.
UpdateTreeFirstLevel
n
]
void
$
CE
.
ce_notify
$
CE
.
UpdateTreeFirstLevel
n
pure
(
ret
,
msgs
)
pure
ret
shareNodeWith
(
ShareNodeWith_Node
NodeFolderPublic
nId
)
n
=
do
shareNodeWith
(
ShareNodeWith_Node
NodeFolderPublic
nId
)
n
=
do
nodeToCheck
<-
getNode
n
nodeToCheck
<-
getNode
n
...
@@ -117,15 +118,14 @@ shareNodeWith (ShareNodeWith_Node NodeFolderPublic nId) n = do
...
@@ -117,15 +118,14 @@ shareNodeWith (ShareNodeWith_Node NodeFolderPublic nId) n = do
if
hasNodeType
folderToCheck
NodeFolderPublic
if
hasNodeType
folderToCheck
NodeFolderPublic
then
do
then
do
ret
<-
shareNode
(
SourceId
nId
)
(
TargetId
n
)
ret
<-
shareNode
(
SourceId
nId
)
(
TargetId
n
)
void
$
CE
.
ce_notify
$
CE
.
UpdateTreeFirstLevel
nId
let
msgs
=
[
CE
.
UpdateTreeFirstLevel
nId
,
CE
.
UpdateTreeFirstLevel
n
]
void
$
CE
.
ce_notify
$
CE
.
UpdateTreeFirstLevel
n
pure
(
ret
,
msgs
)
pure
ret
else
errorWith
"[G.D.A.S.shareNodeWith] Can share NodeWith NodeFolderPublic only"
else
errorWith
"[G.D.A.S.shareNodeWith] Can share NodeWith NodeFolderPublic only"
shareNodeWith
_
_
=
errorWith
"[G.D.A.S.shareNodeWith] Not implemented for this NodeType"
shareNodeWith
_
_
=
errorWith
"[G.D.A.S.shareNodeWith] Not implemented for this NodeType"
------------------------------------------------------------------------
------------------------------------------------------------------------
getFolderId
::
HasNodeError
err
=>
User
->
NodeType
->
DB
Cmd
err
NodeId
getFolderId
::
HasNodeError
err
=>
User
->
NodeType
->
DB
Query
err
x
NodeId
getFolderId
u
nt
=
do
getFolderId
u
nt
=
do
rootId
<-
getRootId
u
rootId
<-
getRootId
u
s
<-
getNodesWith
rootId
HyperdataAny
(
Just
nt
)
Nothing
Nothing
s
<-
getNodesWith
rootId
HyperdataAny
(
Just
nt
)
Nothing
Nothing
...
@@ -136,12 +136,12 @@ getFolderId u nt = do
...
@@ -136,12 +136,12 @@ getFolderId u nt = do
------------------------------------------------------------------------
------------------------------------------------------------------------
type
TeamId
=
NodeId
type
TeamId
=
NodeId
delFolderTeam
::
HasNodeError
err
=>
User
->
TeamId
->
DB
CmdExtra
err
Int
delFolderTeam
::
HasNodeError
err
=>
User
->
TeamId
->
DB
Update
err
Int
delFolderTeam
u
nId
=
do
delFolderTeam
u
nId
=
do
folderSharedId
<-
getFolderId
u
NodeFolderShared
folderSharedId
<-
getFolderId
u
NodeFolderShared
deleteNodeNode
folderSharedId
nId
deleteNodeNode
folderSharedId
nId
unshare
::
HasNodeError
err
unshare
::
HasNodeError
err
=>
ParentId
->
NodeId
=>
ParentId
->
NodeId
->
DB
CmdExtra
err
Int
->
DB
Update
err
Int
unshare
p
n
=
deleteNodeNode
p
n
unshare
p
n
=
deleteNodeNode
p
n
src/Gargantext/Database/Query/Table/NodeNode.hs
View file @
ee0a337c
This diff is collapsed.
Click to expand it.
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