WIP singletons

parent f7adbd9d
Pipeline #325 failed with stage
...@@ -161,6 +161,7 @@ library: ...@@ -161,6 +161,7 @@ library:
- servant-swagger-ui - servant-swagger-ui
- servant-static-th - servant-static-th
- serialise - serialise
- singletons
- split - split
- stemmer - stemmer
- string-conversions - string-conversions
......
...@@ -52,6 +52,7 @@ import Control.Monad.IO.Class (liftIO) ...@@ -52,6 +52,7 @@ import Control.Monad.IO.Class (liftIO)
import Control.Monad.Reader (ReaderT, runReaderT) import Control.Monad.Reader (ReaderT, runReaderT)
import Data.Aeson.Encode.Pretty (encodePretty) import Data.Aeson.Encode.Pretty (encodePretty)
import qualified Data.ByteString.Lazy.Char8 as BL8 import qualified Data.ByteString.Lazy.Char8 as BL8
import Data.Singletons.Prelude
import Data.Swagger import Data.Swagger
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text.IO as T import qualified Data.Text.IO as T
...@@ -85,6 +86,7 @@ import Gargantext.API.Node ( GargServer ...@@ -85,6 +86,7 @@ import Gargantext.API.Node ( GargServer
, NodesAPI , nodesAPI , NodesAPI , nodesAPI
, GraphAPI , graphAPI , GraphAPI , graphAPI
, TreeAPI , treeAPI , TreeAPI , treeAPI
-- , ChildrenAPI , childrenAPI
, HyperdataAny , HyperdataAny
, HyperdataCorpus , HyperdataCorpus
, HyperdataAnnuaire , HyperdataAnnuaire
......
...@@ -15,6 +15,7 @@ Node API ...@@ -15,6 +15,7 @@ Node API
{-# LANGUAGE DataKinds #-} {-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-} {-# LANGUAGE RankNTypes #-}
...@@ -134,7 +135,7 @@ type NodeAPI a = Get '[JSON] (Node a) ...@@ -134,7 +135,7 @@ type NodeAPI a = Get '[JSON] (Node a)
:<|> PostNodeApi -- TODO move to children POST :<|> PostNodeApi -- TODO move to children POST
:<|> Put '[JSON] Int :<|> Put '[JSON] Int
:<|> Delete '[JSON] Int :<|> Delete '[JSON] Int
:<|> "children" :> ChildrenApi a :<|> "children" :> ChildrenAPI
-- TODO gather it -- TODO gather it
:<|> "table" :> TableApi :<|> "table" :> TableApi
...@@ -163,11 +164,26 @@ type PostNodeApi = Summary " PostNode Node with ParentId as {id}" ...@@ -163,11 +164,26 @@ type PostNodeApi = Summary " PostNode Node with ParentId as {id}"
:> ReqBody '[JSON] PostNode :> ReqBody '[JSON] PostNode
:> Post '[JSON] [NodeId] :> Post '[JSON] [NodeId]
type ChildrenApi a = Summary " Summary children" -- Ideally we would like to hide `t` existentially.
:> QueryParam "type" NodeType type ChildrenAPI' (t :: NodeType)
= Summary " Summary children"
:> QueryParam "type" (Sing t)
:> QueryParam "offset" Int :> QueryParam "offset" Int
:> QueryParam "limit" Int :> QueryParam "limit" Int
:> Get '[JSON] [Node a] :> Get '[JSON] [Node (Hyperdata t)]
type ChildrenAPI
= ChildrenAPI' 'NodeCorpus
:<|> ChildrenAPI' 'NodeList
:<|> ChildrenAPI' 'NodeContact
-- ...
childrenAPI :: NodeId -> GargServer ChildrenAPI
childrenAPI n
= getChildren n
:<|> getChildren n
:<|> getChildren n
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- TODO: make the NodeId type indexed by `a`, then we no longer need the proxy. -- TODO: make the NodeId type indexed by `a`, then we no longer need the proxy.
nodeAPI :: JSONB a => proxy a -> UserId -> NodeId -> GargServer (NodeAPI a) nodeAPI :: JSONB a => proxy a -> UserId -> NodeId -> GargServer (NodeAPI a)
...@@ -177,7 +193,7 @@ nodeAPI p uId id ...@@ -177,7 +193,7 @@ nodeAPI p uId id
:<|> postNode uId id :<|> postNode uId id
:<|> putNode id :<|> putNode id
:<|> deleteNode id :<|> deleteNode id
:<|> getChildren id p :<|> childrenAPI id
-- TODO gather it -- TODO gather it
:<|> getTable id :<|> getTable id
......
...@@ -40,7 +40,7 @@ import GHC.Generics (Generic) ...@@ -40,7 +40,7 @@ import GHC.Generics (Generic)
import Servant.API (FromHttpApiData(..)) import Servant.API (FromHttpApiData(..))
import Test.QuickCheck (elements) import Test.QuickCheck (elements)
import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary) import Test.QuickCheck.Arbitrary (Arbitrary, arbitrary)
import Text.Read (read) import Web.HttpApiData (readTextData)
------------------------------------------------------------------------ ------------------------------------------------------------------------
data NodeTree = NodeTree { _nt_name :: Text data NodeTree = NodeTree { _nt_name :: Text
......
...@@ -20,24 +20,24 @@ import Data.Map (Map) ...@@ -20,24 +20,24 @@ import Data.Map (Map)
import qualified Data.Map as DM import qualified Data.Map as DM
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Database.Schema.Ngrams import Gargantext.Database.Schema.Ngrams
import Gargantext.Database.Types.Node (NodeId, Node, NodePoly(..), Hyperdata) import Gargantext.Database.Types.Node (NodeId, Node, NodePoly(..))
import Gargantext.Database.Utils (Cmd) import Gargantext.Database.Utils (Cmd)
import Gargantext.Database.Schema.NodeNgram import Gargantext.Database.Schema.NodeNgram
import Gargantext.Core.Types.Main (ListType(..), listTypeId) import Gargantext.Core.Types.Main (ListType(..), listTypeId)
toMaps :: Hyperdata a => (a -> Map (NgramsT Ngrams) Int) -> [Node a] -> Map (NgramsT Ngrams) (Map NodeId Int) toMaps :: (a -> Map (NgramsT Ngrams) Int) -> [Node a] -> Map (NgramsT Ngrams) (Map NodeId Int)
toMaps fun ns = mapNodeIdNgrams $ documentIdWithNgrams fun ns' toMaps fun ns = mapNodeIdNgrams $ documentIdWithNgrams fun ns'
where where
ns' = map (\(Node nId _ _ _ _ _ json) -> DocumentWithId nId json) ns ns' = map (\(Node nId _ _ _ _ _ json) -> DocumentWithId nId json) ns
mapNodeIdNgrams :: Hyperdata a => [DocumentIdWithNgrams a] -> Map (NgramsT Ngrams) (Map NodeId Int) mapNodeIdNgrams :: [DocumentIdWithNgrams a] -> Map (NgramsT Ngrams) (Map NodeId Int)
mapNodeIdNgrams ds = DM.map (DM.fromListWith (+)) $ DM.fromListWith (<>) xs mapNodeIdNgrams ds = DM.map (DM.fromListWith (+)) $ DM.fromListWith (<>) xs
where where
xs = [(ng, [(nId, i)]) | (nId, n2i') <- n2i ds, (ng, i) <- DM.toList n2i'] xs = [(ng, [(nId, i)]) | (nId, n2i') <- n2i ds, (ng, i) <- DM.toList n2i']
n2i = map (\d -> ((documentId . documentWithId) d, document_ngrams d)) n2i = map (\d -> ((documentId . documentWithId) d, document_ngrams d))
documentIdWithNgrams :: Hyperdata a => (a -> Map (NgramsT Ngrams) Int) documentIdWithNgrams :: (a -> Map (NgramsT Ngrams) Int)
-> [DocumentWithId a] -> [DocumentIdWithNgrams a] -> [DocumentWithId a] -> [DocumentIdWithNgrams a]
documentIdWithNgrams f = map (\d -> DocumentIdWithNgrams d ((f . documentData) d)) documentIdWithNgrams f = map (\d -> DocumentIdWithNgrams d ((f . documentData) d))
......
...@@ -12,8 +12,10 @@ Portability : POSIX ...@@ -12,8 +12,10 @@ Portability : POSIX
{-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE Arrows #-} {-# LANGUAGE Arrows #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE RankNTypes #-} {-# LANGUAGE RankNTypes #-}
module Gargantext.Database.Node.Children where module Gargantext.Database.Node.Children where
...@@ -28,17 +30,20 @@ import Gargantext.Database.Queries.Filter ...@@ -28,17 +30,20 @@ import Gargantext.Database.Queries.Filter
import Gargantext.Database.Node.Contact (HyperdataContact) import Gargantext.Database.Node.Contact (HyperdataContact)
import Gargantext.Database.Schema.Node (pgNodeId) import Gargantext.Database.Schema.Node (pgNodeId)
import Control.Arrow (returnA) import Control.Arrow (returnA)
import Data.Singletons.Prelude
-- | TODO: use getChildren with Proxy ? -- | TODO: use getChildren with Proxy ?
getContacts :: ParentId -> Maybe NodeType -> Cmd err [Node HyperdataContact] getContacts :: ParentId -> Maybe NodeType -> Cmd err [Node HyperdataContact]
getContacts pId maybeNodeType = runOpaQuery $ selectChildren pId maybeNodeType getContacts pId maybeNodeType = runOpaQuery $ selectChildren pId maybeNodeType
getChildren :: JSONB a => ParentId -> proxy a -> Maybe NodeType -> Maybe Offset -> Maybe Limit -> Cmd err [Node a] getChildren :: forall (t :: NodeType) err. JSONB (Hyperdata t) =>
getChildren pId _ maybeNodeType maybeOffset maybeLimit = runOpaQuery ParentId -> Maybe (Sing t) ->
Maybe Offset -> Maybe Limit -> Cmd err [Node (Hyperdata t)]
getChildren pId maybeNodeType maybeOffset maybeLimit = runOpaQuery
$ limit' maybeLimit $ offset' maybeOffset $ limit' maybeLimit $ offset' maybeOffset
$ orderBy (asc _node_id) $ orderBy (asc _node_id)
$ selectChildren pId maybeNodeType $ selectChildren pId (fromSing <$> maybeNodeType)
selectChildren :: ParentId -> Maybe NodeType -> Query NodeRead selectChildren :: ParentId -> Maybe NodeType -> Query NodeRead
selectChildren parentId maybeNodeType = proc () -> do selectChildren parentId maybeNodeType = proc () -> do
......
...@@ -9,6 +9,7 @@ Portability : POSIX ...@@ -9,6 +9,7 @@ Portability : POSIX
-} -}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FunctionalDependencies #-}
...@@ -16,6 +17,7 @@ Portability : POSIX ...@@ -16,6 +17,7 @@ Portability : POSIX
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Gargantext.Database.Node.Contact module Gargantext.Database.Node.Contact
where where
...@@ -29,7 +31,7 @@ import Database.PostgreSQL.Simple.FromField (FromField, fromField) ...@@ -29,7 +31,7 @@ import Database.PostgreSQL.Simple.FromField (FromField, fromField)
import GHC.Generics (Generic) import GHC.Generics (Generic)
import Gargantext.Core.Utils.Prefix (unPrefix) import Gargantext.Core.Utils.Prefix (unPrefix)
import Gargantext.Database.Schema.Node (NodeWrite, Name, node) import Gargantext.Database.Schema.Node (NodeWrite, Name, node)
import Gargantext.Database.Types.Node (Node,Hyperdata,NodeType(..), UserId, AnnuaireId) import Gargantext.Database.Types.Node (Node, Sing(SNodeContact), Hyperdata,NodeType(..), UserId, AnnuaireId)
import Gargantext.Database.Utils (fromField') import Gargantext.Database.Utils (fromField')
import Gargantext.Prelude import Gargantext.Prelude
import Opaleye (QueryRunnerColumnDefault, queryRunnerColumnDefault, PGJsonb, fieldQueryRunnerColumn) import Opaleye (QueryRunnerColumnDefault, queryRunnerColumnDefault, PGJsonb, fieldQueryRunnerColumn)
...@@ -98,7 +100,7 @@ data ContactTouch = ...@@ -98,7 +100,7 @@ data ContactTouch =
nodeContactW :: Maybe Name -> Maybe HyperdataContact nodeContactW :: Maybe Name -> Maybe HyperdataContact
-> AnnuaireId -> UserId -> NodeWrite -> AnnuaireId -> UserId -> NodeWrite
nodeContactW maybeName maybeContact aId = nodeContactW maybeName maybeContact aId =
node NodeContact name contact (Just aId) node SNodeContact name contact (Just aId)
where where
name = maybe "Contact" identity maybeName name = maybe "Contact" identity maybeName
contact = maybe arbitraryHyperdataContact identity maybeContact contact = maybe arbitraryHyperdataContact identity maybeContact
...@@ -115,7 +117,7 @@ instance Arbitrary HyperdataContact where ...@@ -115,7 +117,7 @@ instance Arbitrary HyperdataContact where
-- | Specific Gargantext instance -- | Specific Gargantext instance
instance Hyperdata HyperdataContact type instance Hyperdata 'NodeContact = HyperdataContact
-- | Database (Posgresql-simple instance) -- | Database (Posgresql-simple instance)
instance FromField HyperdataContact where instance FromField HyperdataContact where
......
...@@ -32,6 +32,7 @@ import Control.Monad.Error.Class (MonadError(..)) ...@@ -32,6 +32,7 @@ import Control.Monad.Error.Class (MonadError(..))
import Data.Aeson import Data.Aeson
import Data.Maybe (Maybe(..), fromMaybe) import Data.Maybe (Maybe(..), fromMaybe)
import Data.Profunctor.Product.TH (makeAdaptorAndInstance) import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
import Data.Singletons.Prelude
import Data.Text (Text, pack) import Data.Text (Text, pack)
import Database.PostgreSQL.Simple.FromField (FromField, fromField) import Database.PostgreSQL.Simple.FromField (FromField, fromField)
import GHC.Int (Int64) import GHC.Int (Int64)
...@@ -374,7 +375,7 @@ defaultUser :: HyperdataUser ...@@ -374,7 +375,7 @@ defaultUser :: HyperdataUser
defaultUser = HyperdataUser (Just $ (pack . show) EN) defaultUser = HyperdataUser (Just $ (pack . show) EN)
nodeUserW :: Maybe Name -> Maybe HyperdataUser -> UserId -> NodeWrite nodeUserW :: Maybe Name -> Maybe HyperdataUser -> UserId -> NodeWrite
nodeUserW maybeName maybeHyperdata = node NodeUser name user Nothing nodeUserW maybeName maybeHyperdata = node SNodeUser name user Nothing
where where
name = maybe "User" identity maybeName name = maybe "User" identity maybeName
user = maybe defaultUser identity maybeHyperdata user = maybe defaultUser identity maybeHyperdata
...@@ -383,13 +384,13 @@ defaultFolder :: HyperdataFolder ...@@ -383,13 +384,13 @@ defaultFolder :: HyperdataFolder
defaultFolder = HyperdataFolder (Just "Markdown Description") defaultFolder = HyperdataFolder (Just "Markdown Description")
nodeFolderW :: Maybe Name -> Maybe HyperdataFolder -> ParentId -> UserId -> NodeWrite nodeFolderW :: Maybe Name -> Maybe HyperdataFolder -> ParentId -> UserId -> NodeWrite
nodeFolderW maybeName maybeFolder pid = node NodeFolder name folder (Just pid) nodeFolderW maybeName maybeFolder pid = node SNodeFolder name folder (Just pid)
where where
name = maybe "Folder" identity maybeName name = maybe "Folder" identity maybeName
folder = maybe defaultFolder identity maybeFolder folder = maybe defaultFolder identity maybeFolder
------------------------------------------------------------------------ ------------------------------------------------------------------------
nodeCorpusW :: Maybe Name -> Maybe HyperdataCorpus -> ParentId -> UserId -> NodeWrite nodeCorpusW :: Maybe Name -> Maybe HyperdataCorpus -> ParentId -> UserId -> NodeWrite
nodeCorpusW maybeName maybeCorpus pId = node NodeCorpus name corpus (Just pId) nodeCorpusW maybeName maybeCorpus pId = node SNodeCorpus name corpus (Just pId)
where where
name = maybe "Corpus" identity maybeName name = maybe "Corpus" identity maybeName
corpus = maybe defaultCorpus identity maybeCorpus corpus = maybe defaultCorpus identity maybeCorpus
...@@ -398,7 +399,7 @@ defaultDocument :: HyperdataDocument ...@@ -398,7 +399,7 @@ defaultDocument :: HyperdataDocument
defaultDocument = hyperdataDocument defaultDocument = hyperdataDocument
nodeDocumentW :: Maybe Name -> Maybe HyperdataDocument -> CorpusId -> UserId -> NodeWrite nodeDocumentW :: Maybe Name -> Maybe HyperdataDocument -> CorpusId -> UserId -> NodeWrite
nodeDocumentW maybeName maybeDocument cId = node NodeDocument name doc (Just cId) nodeDocumentW maybeName maybeDocument cId = node SNodeDocument name doc (Just cId)
where where
name = maybe "Document" identity maybeName name = maybe "Document" identity maybeName
doc = maybe defaultDocument identity maybeDocument doc = maybe defaultDocument identity maybeDocument
...@@ -407,7 +408,7 @@ defaultAnnuaire :: HyperdataAnnuaire ...@@ -407,7 +408,7 @@ defaultAnnuaire :: HyperdataAnnuaire
defaultAnnuaire = HyperdataAnnuaire (Just "Title") (Just "Description") defaultAnnuaire = HyperdataAnnuaire (Just "Title") (Just "Description")
nodeAnnuaireW :: Maybe Name -> Maybe HyperdataAnnuaire -> ParentId -> UserId -> NodeWrite nodeAnnuaireW :: Maybe Name -> Maybe HyperdataAnnuaire -> ParentId -> UserId -> NodeWrite
nodeAnnuaireW maybeName maybeAnnuaire pId = node NodeAnnuaire name annuaire (Just pId) nodeAnnuaireW maybeName maybeAnnuaire pId = node SNodeAnnuaire name annuaire (Just pId)
where where
name = maybe "Annuaire" identity maybeName name = maybe "Annuaire" identity maybeName
annuaire = maybe defaultAnnuaire identity maybeAnnuaire annuaire = maybe defaultAnnuaire identity maybeAnnuaire
...@@ -417,7 +418,7 @@ arbitraryList :: HyperdataList ...@@ -417,7 +418,7 @@ arbitraryList :: HyperdataList
arbitraryList = HyperdataList (Just "Preferences") arbitraryList = HyperdataList (Just "Preferences")
nodeListW :: Maybe Name -> Maybe HyperdataList -> ParentId -> UserId -> NodeWrite nodeListW :: Maybe Name -> Maybe HyperdataList -> ParentId -> UserId -> NodeWrite
nodeListW maybeName maybeList pId = node NodeList name list (Just pId) nodeListW maybeName maybeList pId = node SNodeList name list (Just pId)
where where
name = maybe "Listes" identity maybeName name = maybe "Listes" identity maybeName
list = maybe arbitraryList identity maybeList list = maybe arbitraryList identity maybeList
...@@ -431,7 +432,7 @@ mkListModelNode :: HasNodeError err => ParentId -> UserId -> Cmd err [NodeId] ...@@ -431,7 +432,7 @@ mkListModelNode :: HasNodeError err => ParentId -> UserId -> Cmd err [NodeId]
mkListModelNode p u = insertNodesR [nodeListModelW Nothing Nothing p u] mkListModelNode p u = insertNodesR [nodeListModelW Nothing Nothing p u]
nodeListModelW :: Maybe Name -> Maybe HyperdataListModel -> ParentId -> UserId -> NodeWrite nodeListModelW :: Maybe Name -> Maybe HyperdataListModel -> ParentId -> UserId -> NodeWrite
nodeListModelW maybeName maybeListModel pId = node NodeListModel name list (Just pId) nodeListModelW maybeName maybeListModel pId = node SNodeListModel name list (Just pId)
where where
name = maybe "List Model" identity maybeName name = maybe "List Model" identity maybeName
list = maybe arbitraryListModel identity maybeListModel list = maybe arbitraryListModel identity maybeListModel
...@@ -441,7 +442,7 @@ arbitraryGraph :: HyperdataGraph ...@@ -441,7 +442,7 @@ arbitraryGraph :: HyperdataGraph
arbitraryGraph = HyperdataGraph (Just "Preferences") arbitraryGraph = HyperdataGraph (Just "Preferences")
nodeGraphW :: Maybe Name -> Maybe HyperdataGraph -> ParentId -> UserId -> NodeWrite nodeGraphW :: Maybe Name -> Maybe HyperdataGraph -> ParentId -> UserId -> NodeWrite
nodeGraphW maybeName maybeGraph pId = node NodeGraph name graph (Just pId) nodeGraphW maybeName maybeGraph pId = node SNodeGraph name graph (Just pId)
where where
name = maybe "Graph" identity maybeName name = maybe "Graph" identity maybeName
graph = maybe arbitraryGraph identity maybeGraph graph = maybe arbitraryGraph identity maybeGraph
...@@ -452,16 +453,16 @@ arbitraryDashboard :: HyperdataDashboard ...@@ -452,16 +453,16 @@ arbitraryDashboard :: HyperdataDashboard
arbitraryDashboard = HyperdataDashboard (Just "Preferences") arbitraryDashboard = HyperdataDashboard (Just "Preferences")
nodeDashboardW :: Maybe Name -> Maybe HyperdataDashboard -> ParentId -> UserId -> NodeWrite nodeDashboardW :: Maybe Name -> Maybe HyperdataDashboard -> ParentId -> UserId -> NodeWrite
nodeDashboardW maybeName maybeDashboard pId = node NodeDashboard name dashboard (Just pId) nodeDashboardW maybeName maybeDashboard pId = node SNodeDashboard name dashboard (Just pId)
where where
name = maybe "Dashboard" identity maybeName name = maybe "Dashboard" identity maybeName
dashboard = maybe arbitraryDashboard identity maybeDashboard dashboard = maybe arbitraryDashboard identity maybeDashboard
------------------------------------------------------------------------ ------------------------------------------------------------------------
node :: (ToJSON a, Hyperdata a) => NodeType -> Name -> a -> Maybe ParentId -> UserId -> NodeWrite node :: ToJSON (Hyperdata t) => Sing t -> Name -> Hyperdata t -> Maybe ParentId -> UserId -> NodeWrite
node nodeType name hyperData parentId userId = Node Nothing (pgInt4 typeId) (pgInt4 userId) (pgNodeId <$> parentId) (pgStrictText name) Nothing (pgJSONB $ cs $ encode hyperData) node nodeTypeS name hyperData parentId userId = Node Nothing (pgInt4 typeId) (pgInt4 userId) (pgNodeId <$> parentId) (pgStrictText name) Nothing (pgJSONB $ cs $ encode hyperData)
where where
typeId = nodeTypeId nodeType typeId = nodeTypeId (fromSing nodeTypeS)
------------------------------- -------------------------------
insertNodes :: [NodeWrite] -> Cmd err Int64 insertNodes :: [NodeWrite] -> Cmd err Int64
...@@ -546,7 +547,7 @@ type Name = Text ...@@ -546,7 +547,7 @@ type Name = Text
mkNodeWithParent :: HasNodeError err => NodeType -> Maybe ParentId -> UserId -> Name -> Cmd err [NodeId] mkNodeWithParent :: HasNodeError err => NodeType -> Maybe ParentId -> UserId -> Name -> Cmd err [NodeId]
mkNodeWithParent NodeUser (Just _) _ _ = nodeError UserNoParent mkNodeWithParent NodeUser (Just _) _ _ = nodeError UserNoParent
mkNodeWithParent NodeUser Nothing uId name = mkNodeWithParent NodeUser Nothing uId name =
insertNodesWithParentR Nothing [node NodeUser name hd Nothing uId] insertNodesWithParentR Nothing [node SNodeUser name hd Nothing uId]
where where
hd = HyperdataUser . Just . pack $ show EN hd = HyperdataUser . Just . pack $ show EN
mkNodeWithParent _ Nothing _ _ = nodeError HasParent mkNodeWithParent _ Nothing _ _ = nodeError HasParent
......
This diff is collapsed.
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