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
147
Issues
147
List
Board
Labels
Milestones
Merge Requests
9
Merge Requests
9
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
134007c8
Commit
134007c8
authored
Jan 25, 2019
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev-comments' into dev
parents
90f7241e
f81ecca6
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
71 additions
and
33 deletions
+71
-33
API.hs
src/Gargantext/API.hs
+9
-5
Count.hs
src/Gargantext/API/Count.hs
+2
-0
Node.hs
src/Gargantext/API/Node.hs
+38
-11
Search.hs
src/Gargantext/API/Search.hs
+2
-0
Flow.hs
src/Gargantext/Database/Flow.hs
+7
-1
Insert.hs
src/Gargantext/Database/Node/Document/Insert.hs
+2
-0
Ngrams.hs
src/Gargantext/Database/Schema/Ngrams.hs
+2
-0
Node.hs
src/Gargantext/Database/Schema/Node.hs
+7
-16
NodeNgram.hs
src/Gargantext/Database/Schema/NodeNgram.hs
+2
-0
No files found.
src/Gargantext/API.hs
View file @
134007c8
...
...
@@ -249,9 +249,11 @@ type GargAPI' =
:>
QueryParam
"order"
OrderBy
:>
SearchAPI
-- TODO move to NodeAPI?
:<|>
"graph"
:>
Summary
"Graph endpoint"
:>
Capture
"id"
NodeId
:>
GraphAPI
-- TODO move to NodeAPI?
-- Tree endpoint
:<|>
"tree"
:>
Summary
"Tree endpoint"
:>
Capture
"id"
NodeId
:>
TreeAPI
...
...
@@ -285,15 +287,17 @@ serverGargAPI :: GargServer GargAPI
serverGargAPI
-- orchestrator
=
auth
:<|>
roots
:<|>
nodeAPI
(
Proxy
::
Proxy
HyperdataAny
)
:<|>
nodeAPI
(
Proxy
::
Proxy
HyperdataCorpus
)
:<|>
nodeAPI
(
Proxy
::
Proxy
HyperdataAnnuaire
)
:<|>
nodeAPI
(
Proxy
::
Proxy
HyperdataAny
)
fakeUserId
:<|>
nodeAPI
(
Proxy
::
Proxy
HyperdataCorpus
)
fakeUserId
:<|>
nodeAPI
(
Proxy
::
Proxy
HyperdataAnnuaire
)
fakeUserId
:<|>
nodesAPI
:<|>
count
-- TODO: undefined
:<|>
search
:<|>
graphAPI
-- TODO: mock
:<|>
treeAPI
-- :<|> orchestrator
where
fakeUserId
=
1
-- TODO
serverIndex
::
Server
(
Get
'[
H
TML
]
Html
)
serverIndex
=
$
(
do
(
Just
s
)
<-
liftIO
(
fileTypeToFileTree
(
FileTypeFile
"purescript-gargantext/dist/index.html"
))
...
...
src/Gargantext/API/Count.hs
View file @
134007c8
...
...
@@ -44,6 +44,8 @@ import Gargantext.Prelude
import
Gargantext.Core.Utils.Prefix
(
unPrefix
)
-----------------------------------------------------------------------
-- TODO-ACCESS: CanCount
-- TODO-EVENTS: No events as this is a read only query.
type
CountAPI
=
Post
'[
J
SON
]
Counts
-----------------------------------------------------------------------
...
...
src/Gargantext/API/Node.hs
View file @
134007c8
...
...
@@ -50,7 +50,7 @@ import Gargantext.API.Ngrams (TabType(..), TableNgramsApi, TableNgramsApiGet, ta
import
Gargantext.Prelude
import
Gargantext.Database.Types.Node
import
Gargantext.Database.Utils
-- (Cmd, CmdM)
import
Gargantext.Database.Schema.Node
(
getNodesWithParentId
,
getNode
,
deleteNode
,
deleteNodes
,
mk
,
JSONB
,
NodeError
(
..
),
HasNodeError
(
..
))
import
Gargantext.Database.Schema.Node
(
getNodesWithParentId
,
getNode
,
deleteNode
,
deleteNodes
,
mk
NodeWithParent
,
JSONB
,
NodeError
(
..
),
HasNodeError
(
..
))
import
Gargantext.Database.Node.Children
(
getChildren
)
import
qualified
Gargantext.Database.Node.Update
as
U
(
update
,
Update
(
..
))
import
Gargantext.Database.Facet
(
FacetDoc
,
runViewDocuments
,
OrderBy
(
..
),
FacetChart
,
runViewAuthorsDoc
)
...
...
@@ -75,7 +75,11 @@ import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
type
GargServer
api
=
forall
env
m
.
CmdM
env
ServantErr
m
=>
ServerT
api
m
-------------------------------------------------------------------
-- | TODO : access by admin only
-- TODO-ACCESS: access by admin only.
-- At first let's just have an isAdmin check.
-- Later: check userId CanDeleteNodes Nothing
-- TODO-EVENTS: DeletedNodes [NodeId]
-- {"tag": "DeletedNodes", "nodes": [Int*]}
type
NodesAPI
=
Delete
'[
J
SON
]
Int
-- | Delete Nodes
...
...
@@ -85,8 +89,13 @@ nodesAPI :: [NodeId] -> GargServer NodesAPI
nodesAPI
ids
=
deleteNodes
ids
------------------------------------------------------------------------
-- | TODO: access by admin only
-- To manager the Users roots
-- | TODO-ACCESS: access by admin only.
-- At first let's just have an isAdmin check.
-- Later: CanAccessAnyNode or (CanGetAnyNode, CanPutAnyNode)
-- To manage the Users roots
-- TODO-EVENTS:
-- PutNode ?
-- TODO needs design discussion.
type
Roots
=
Get
'[
J
SON
]
[
NodeAny
]
:<|>
Put
'[
J
SON
]
Int
-- TODO
...
...
@@ -97,10 +106,21 @@ roots = (liftIO (putStrLn ( "/user" :: Text)) >> getNodesWithParentId 0 Nothing)
-------------------------------------------------------------------
-- | Node API Types management
-- TODO : access by users
-- TODO-ACCESS : access by users
-- No ownership check is needed if we strictly follow the capability model.
--
-- CanGetNode (Node, Children, TableApi, TableNgramsApiGet, PairingApi, ChartApi,
-- SearchAPI)
-- CanRenameNode (or part of CanEditNode?)
-- CanCreateChildren (PostNodeApi)
-- CanEditNode / CanPutNode TODO not implemented yet
-- CanDeleteNode
-- CanPatch (TableNgramsApi)
-- CanFavorite
-- CanMoveToTrash
type
NodeAPI
a
=
Get
'[
J
SON
]
(
Node
a
)
:<|>
"rename"
:>
RenameApi
:<|>
PostNodeApi
:<|>
PostNodeApi
-- TODO move to children POST
:<|>
Put
'[
J
SON
]
Int
:<|>
Delete
'[
J
SON
]
Int
:<|>
"children"
:>
ChildrenApi
a
...
...
@@ -121,6 +141,8 @@ type NodeAPI a = Get '[JSON] (Node a)
:>
QueryParam
"order"
OrderBy
:>
SearchAPI
-- TODO-ACCESS: check userId CanRenameNode nodeId
-- TODO-EVENTS: NodeRenamed RenameNode or re-use some more general NodeEdited...
type
RenameApi
=
Summary
" Rename Node"
:>
ReqBody
'[
J
SON
]
RenameNode
:>
Put
'[
J
SON
]
[
Int
]
...
...
@@ -136,10 +158,11 @@ type ChildrenApi a = Summary " Summary children"
:>
Get
'[
J
SON
]
[
Node
a
]
------------------------------------------------------------------------
-- TODO: make the NodeId type indexed by `a`, then we no longer need the proxy.
nodeAPI
::
JSONB
a
=>
proxy
a
->
NodeId
->
GargServer
(
NodeAPI
a
)
nodeAPI
p
id
=
getNode
id
p
nodeAPI
::
JSONB
a
=>
proxy
a
->
UserId
->
NodeId
->
GargServer
(
NodeAPI
a
)
nodeAPI
p
uId
id
=
getNode
id
p
:<|>
rename
id
:<|>
postNode
id
:<|>
postNode
uId
id
:<|>
putNode
id
:<|>
deleteNode
id
:<|>
getChildren
id
p
...
...
@@ -247,6 +270,8 @@ type ChartApi = Summary " Chart API"
-- :<|> "query" :> Capture "string" Text :> Get '[JSON] Text
------------------------------------------------------------------------
-- TODO-ACCESS: CanGetNode
-- TODO-EVENTS: No events as this is a read only query.
type
GraphAPI
=
Get
'[
J
SON
]
Graph
graphAPI
::
NodeId
->
GargServer
GraphAPI
...
...
@@ -301,6 +326,8 @@ instance HasTreeError ServantErr where
mk
TooManyRoots
=
err500
{
errBody
=
e
<>
"Too many root nodes"
}
type
TreeAPI
=
Get
'[
J
SON
]
(
Tree
NodeTree
)
-- TODO-ACCESS: CanTree or CanGetNode
-- TODO-EVENTS: No events as this is a read only query.
treeAPI
::
NodeId
->
GargServer
TreeAPI
treeAPI
=
treeDB
...
...
@@ -330,8 +357,8 @@ getChart :: NodeId -> Maybe UTCTime -> Maybe UTCTime
->
Cmd
err
[
FacetChart
]
getChart
_
_
_
=
undefined
-- TODO
postNode
::
NodeId
->
PostNode
->
Cmd
err
[
NodeId
]
postNode
pId
(
PostNode
name
nt
)
=
mk
nt
(
Just
pId
)
name
postNode
::
HasNodeError
err
=>
UserId
->
NodeId
->
PostNode
->
Cmd
err
[
NodeId
]
postNode
uId
pId
(
PostNode
name
nt
)
=
mkNodeWithParent
nt
(
Just
pId
)
uId
name
putNode
::
NodeId
->
Cmd
err
Int
putNode
=
undefined
-- TODO
...
...
src/Gargantext/API/Search.hs
View file @
134007c8
...
...
@@ -85,6 +85,8 @@ instance ToSchema SearchResults where
defaultSchemaOptions
{
fieldLabelModifier
=
\
fieldLabel
->
drop
4
fieldLabel
}
-----------------------------------------------------------------------
-- TODO-ACCESS: CanSearch? or is it part of CanGetNode
-- TODO-EVENTS: No event, this is a read-only query.
type
SearchAPI
=
Post
'[
J
SON
]
SearchResults
-----------------------------------------------------------------------
...
...
src/Gargantext/Database/Flow.hs
View file @
134007c8
...
...
@@ -97,7 +97,13 @@ flowInsertAnnuaire name children = do
pure
(
ids
,
masterUserId
,
masterCorpusId
,
userId
,
userCorpusId
)
-- TODO-ACCESS:
-- check userId CanFillUserCorpus userCorpusId
-- check masterUserId CanFillMasterCorpus masterCorpusId
--
-- TODO-EVENTS:
-- InsertedNgrams ?
-- InsertedNodeNgrams ?
flowCorpus'
::
HasNodeError
err
=>
NodeType
->
[
HyperdataDocument
]
->
([
ReturnId
],
UserId
,
CorpusId
,
UserId
,
CorpusId
)
...
...
src/Gargantext/Database/Node/Document/Insert.hs
View file @
134007c8
...
...
@@ -113,6 +113,8 @@ import Database.PostgreSQL.Simple (formatQuery)
data
ToDbData
=
ToDbDocument
HyperdataDocument
|
ToDbContact
HyperdataContact
-- TODO-ACCESS: check uId CanInsertDoc pId && checkDocType nodeType
-- TODO-EVENTS: InsertedNodes
insertDocuments
::
UserId
->
ParentId
->
NodeType
->
[
ToDbData
]
->
Cmd
err
[
ReturnId
]
insertDocuments
uId
pId
nodeType
=
runPGSQuery
queryInsert
.
Only
.
Values
fields
.
prepare
uId
pId
nodeType
...
...
src/Gargantext/Database/Schema/Ngrams.hs
View file @
134007c8
...
...
@@ -193,9 +193,11 @@ indexNgramsTWith = fmap . indexNgramsWith
indexNgramsWith
::
(
NgramsTerms
->
NgramsId
)
->
Ngrams
->
NgramsIndexed
indexNgramsWith
f
n
=
NgramsIndexed
n
(
f
$
_ngramsTerms
n
)
-- TODO-ACCESS: access must not be checked here but when insertNgrams is called.
insertNgrams
::
[
Ngrams
]
->
Cmd
err
(
Map
NgramsTerms
NgramsId
)
insertNgrams
ns
=
fromList
<$>
map
(
\
(
NgramIds
i
t
)
->
(
t
,
i
))
<$>
(
insertNgrams'
ns
)
-- TODO-ACCESS: access must not be checked here but when insertNgrams' is called.
insertNgrams'
::
[
Ngrams
]
->
Cmd
err
[
NgramIds
]
insertNgrams'
ns
=
runPGSQuery
queryInsertNgrams
(
PGS
.
Only
$
Values
fields
ns
)
where
...
...
src/Gargantext/Database/Schema/Node.hs
View file @
134007c8
...
...
@@ -500,29 +500,20 @@ childWith uId pId (Node' NodeContact txt v []) = node2table uId (Just pId) (Nod
childWith
_
_
(
Node'
_
_
_
_
)
=
panic
"This NodeType can not be a child"
-- | TODO Use right userId
mk
::
NodeType
->
Maybe
ParentId
->
Text
->
Cmd
err
[
NodeId
]
mk
nt
pId
name
=
mk'
nt
userId
pId
name
where
userId
=
1
type
Name
=
Text
mk'
::
NodeType
->
UserId
->
Maybe
ParentId
->
Text
->
Cmd
err
[
NodeId
]
mk'
nt
uId
pId
name
=
insertNodesWithParentR
pId
[
node
nt
name
hd
pId
uId
]
mkNodeWithParent
::
HasNodeError
err
=>
NodeType
->
Maybe
ParentId
->
UserId
->
Name
->
Cmd
err
[
NodeId
]
mkNodeWithParent
NodeUser
(
Just
_
)
_
_
=
nodeError
UserNoParent
mkNodeWithParent
_
Nothing
_
_
=
nodeError
HasParent
mkNodeWithParent
nt
pId
uId
name
=
insertNodesWithParentR
pId
[
node
nt
name
hd
pId
uId
]
where
hd
=
HyperdataUser
.
Just
.
pack
$
show
EN
type
Name
=
Text
mk''
::
HasNodeError
err
=>
NodeType
->
Maybe
ParentId
->
UserId
->
Name
->
Cmd
err
[
NodeId
]
mk''
NodeUser
Nothing
uId
name
=
mk'
NodeUser
uId
Nothing
name
mk''
NodeUser
_
_
_
=
nodeError
UserNoParent
mk''
_
Nothing
_
_
=
nodeError
HasParent
mk''
nt
pId
uId
name
=
mk'
nt
uId
pId
name
mkRoot
::
HasNodeError
err
=>
Username
->
UserId
->
Cmd
err
[
RootId
]
mkRoot
uname
uId
=
case
uId
>
0
of
False
->
nodeError
NegativeId
True
->
mk
''
NodeUser
Nothing
uId
uname
True
->
mk
NodeWithParent
NodeUser
Nothing
uId
uname
mkCorpus
::
Maybe
Name
->
Maybe
HyperdataCorpus
->
ParentId
->
UserId
->
Cmd
err
[
CorpusId
]
mkCorpus
n
h
p
u
=
insertNodesR
[
nodeCorpusW
n
h
p
u
]
...
...
src/Gargantext/Database/Schema/NodeNgram.hs
View file @
134007c8
...
...
@@ -288,6 +288,8 @@ data NodeNgramsUpdate = NodeNgramsUpdate
}
-- TODO wrap these updates in a transaction.
-- TODO-ACCESS:
-- * check userId CanUpdateNgrams userListId
updateNodeNgrams
::
NodeNgramsUpdate
->
Cmd
err
()
updateNodeNgrams
nnu
=
do
updateNodeNgrams'
userListId
$
_nnu_lists_update
nnu
...
...
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