Commit faf030b1 authored by Alfredo Di Napoli's avatar Alfredo Di Napoli

WIP

parent e79541d7
Pipeline #7562 failed with stages
in 14 minutes and 13 seconds
...@@ -39,7 +39,7 @@ import Gargantext.API.Node.Types ...@@ -39,7 +39,7 @@ import Gargantext.API.Node.Types
import Gargantext.Core (withDefaultLanguage, defaultLanguage) import Gargantext.Core (withDefaultLanguage, defaultLanguage)
import Gargantext.Core.Config (gc_jobs, hasConfig) import Gargantext.Core.Config (gc_jobs, hasConfig)
import Gargantext.Core.Config.Types (jc_max_docs_parsers) import Gargantext.Core.Config.Types (jc_max_docs_parsers)
import Gargantext.Core.NodeStory (HasNodeStoryImmediateSaver, HasNodeArchiveStoryImmediateSaver, currentVersion, NgramsStatePatch', HasNodeStoryEnv) import Gargantext.Core.NodeStory (currentVersion, NgramsStatePatch', HasNodeStoryEnv)
import Gargantext.Core.Text.Corpus.Parsers qualified as Parser (FileType(..), parseFormatC, _ParseFormatError) import Gargantext.Core.Text.Corpus.Parsers qualified as Parser (FileType(..), parseFormatC, _ParseFormatError)
import Gargantext.Core.Text.Corpus.Parsers.Types import Gargantext.Core.Text.Corpus.Parsers.Types
import Gargantext.Core.Text.Corpus.Query qualified as API import Gargantext.Core.Text.Corpus.Query qualified as API
...@@ -150,8 +150,6 @@ type AddWithFile = Summary "Add with MultipartData to corpus endpoint" ...@@ -150,8 +150,6 @@ type AddWithFile = Summary "Add with MultipartData to corpus endpoint"
addToCorpusWithQuery :: ( FlowCmdM env err m addToCorpusWithQuery :: ( FlowCmdM env err m
, MonadJobStatus m , MonadJobStatus m
, HasNodeStoryImmediateSaver env
, HasNodeArchiveStoryImmediateSaver env
) )
=> User => User
-> CorpusId -> CorpusId
...@@ -221,8 +219,6 @@ addToCorpusWithQuery user cid (WithQuery { _wq_query = q ...@@ -221,8 +219,6 @@ addToCorpusWithQuery user cid (WithQuery { _wq_query = q
addToCorpusWithTempFile :: ( MonadMask m addToCorpusWithTempFile :: ( MonadMask m
, FlowCmdM env err m , FlowCmdM env err m
, MonadJobStatus m , MonadJobStatus m
, HasNodeStoryImmediateSaver env
, HasNodeArchiveStoryImmediateSaver env
) )
=> User => User
-> CorpusId -> CorpusId
...@@ -372,10 +368,7 @@ addToCorpusWithFile user cid nwf@(NewWithFile _d (withDefaultLanguage -> l) fNam ...@@ -372,10 +368,7 @@ addToCorpusWithFile user cid nwf@(NewWithFile _d (withDefaultLanguage -> l) fNam
--- UTILITIES --- UTILITIES
commitCorpus :: ( IsDBCmd env err m commitCorpus :: ( IsDBCmd env err m
, HasNodeStoryEnv env )
, HasNodeError err
, HasNodeArchiveStoryImmediateSaver env
, HasNodeStoryImmediateSaver env )
=> ParentId => ParentId
-> User -> User
-> m (Versioned NgramsStatePatch') -> m (Versioned NgramsStatePatch')
......
...@@ -35,6 +35,7 @@ import Gargantext.Database.Action.User (getUserId) ...@@ -35,6 +35,7 @@ import Gargantext.Database.Action.User (getUserId)
import Gargantext.Database.Admin.Types.Hyperdata.Corpus (HyperdataCorpus) import Gargantext.Database.Admin.Types.Hyperdata.Corpus (HyperdataCorpus)
import Gargantext.Database.Admin.Types.Hyperdata.Document (HyperdataDocument(..)) import Gargantext.Database.Admin.Types.Hyperdata.Document (HyperdataDocument(..))
import Gargantext.Database.Admin.Types.Node (CorpusId, ListId, NodeType(NodeTexts)) import Gargantext.Database.Admin.Types.Node (CorpusId, ListId, NodeType(NodeTexts))
import Gargantext.Database.Prelude
import Gargantext.Database.Query.Table.Node (getOrMkList, insertDefaultNodeIfNotExists) import Gargantext.Database.Query.Table.Node (getOrMkList, insertDefaultNodeIfNotExists)
import Gargantext.Database.Query.Table.Node.Error (HasNodeError) import Gargantext.Database.Query.Table.Node.Error (HasNodeError)
import Gargantext.Database.Query.Tree.Error (HasTreeError) import Gargantext.Database.Query.Tree.Error (HasTreeError)
...@@ -146,7 +147,6 @@ insertSearxResponse user cId listId l (Right (SearxResponse { _srs_results })) = ...@@ -146,7 +147,6 @@ insertSearxResponse user cId listId l (Right (SearxResponse { _srs_results })) =
pure () pure ()
-- TODO Make an async task out of this? -- TODO Make an async task out of this?
triggerSearxSearch :: ( MonadBase IO m triggerSearxSearch :: ( MonadBase IO m
, HasNodeStory env err m , HasNodeStory env err m
...@@ -163,9 +163,9 @@ triggerSearxSearch :: ( MonadBase IO m ...@@ -163,9 +163,9 @@ triggerSearxSearch :: ( MonadBase IO m
-> JobHandle m -> JobHandle m
-> m () -> m ()
triggerSearxSearch user cId q l jobHandle = do triggerSearxSearch user cId q l jobHandle = do
userId <- getUserId user runDBTx $ do
userId <- getUserId user
_tId <- insertDefaultNodeIfNotExists NodeTexts cId userId void $ insertDefaultNodeIfNotExists NodeTexts cId userId
let numPages = 100 let numPages = 100
markStarted numPages jobHandle markStarted numPages jobHandle
...@@ -174,10 +174,12 @@ triggerSearxSearch user cId q l jobHandle = do ...@@ -174,10 +174,12 @@ triggerSearxSearch user cId q l jobHandle = do
-- printDebug "[triggerSearxSearch] q" q -- printDebug "[triggerSearxSearch] q" q
-- printDebug "[triggerSearxSearch] l" l -- printDebug "[triggerSearxSearch] l" l
cfg <- view hasConfig cfg <- view hasConfig
uId <- getUserId user
let surl = _f_searx_url $ _gc_frames cfg let surl = _f_searx_url $ _gc_frames cfg
-- printDebug "[triggerSearxSearch] surl" surl
listId <- getOrMkList cId uId listId <- runDBTx $ do
uId <- getUserId user
-- printDebug "[triggerSearxSearch] surl" surl
getOrMkList cId uId
-- printDebug "[triggerSearxSearch] listId" listId -- printDebug "[triggerSearxSearch] listId" listId
......
...@@ -23,6 +23,7 @@ Portability : POSIX ...@@ -23,6 +23,7 @@ Portability : POSIX
{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeOperators #-}
{-# LANGUAGE LambdaCase #-} {-# LANGUAGE LambdaCase #-}
{-# LANGUAGE TupleSections #-}
module Gargantext.Database.Action.Flow -- (flowDatabase, ngrams2list) module Gargantext.Database.Action.Flow -- (flowDatabase, ngrams2list)
( DataText(..) ( DataText(..)
...@@ -317,8 +318,8 @@ addDocumentsToHyperCorpus :: ( IsDBCmd env err m ...@@ -317,8 +318,8 @@ addDocumentsToHyperCorpus :: ( IsDBCmd env err m
addDocumentsToHyperCorpus mb_hyper la corpusId docs = do addDocumentsToHyperCorpus mb_hyper la corpusId docs = do
cfg <- view hasConfig cfg <- view hasConfig
nlp <- view (nlpServerGet $ _tt_lang la) nlp <- view (nlpServerGet $ _tt_lang la)
ids <- insertMasterDocs cfg nlp mb_hyper la docs
runDBTx $ do runDBTx $ do
ids <- insertMasterDocs cfg nlp mb_hyper la docs
void $ Doc.add corpusId (map nodeId2ContextId ids) void $ Doc.add corpusId (map nodeId2ContextId ids)
pure ids pure ids
...@@ -364,12 +365,9 @@ flowCorpusUser :: ( HasNodeError err ...@@ -364,12 +365,9 @@ flowCorpusUser :: ( HasNodeError err
-> Maybe FlowSocialListWith -> Maybe FlowSocialListWith
-> m CorpusId -> m CorpusId
flowCorpusUser l user userCorpusId listId ctype mfslw = do flowCorpusUser l user userCorpusId listId ctype mfslw = do
cfg <- view hasConfig
env <- view hasNodeStory env <- view hasNodeStory
nlpServer <- view (nlpServerGet l) buildSocialList l user userCorpusId listId ctype mfslw
runDBTx $ do runDBTx $ do
buildSocialList cfg nlpServer l user userCorpusId listId ctype mfslw
-- _ <- insertOccsUpdates userCorpusId mastListId -- _ <- insertOccsUpdates userCorpusId mastListId
--_ <- mkPhylo userCorpusId userId --_ <- mkPhylo userCorpusId userId
-- Annuaire Flow -- Annuaire Flow
...@@ -385,48 +383,59 @@ flowCorpusUser l user userCorpusId listId ctype mfslw = do ...@@ -385,48 +383,59 @@ flowCorpusUser l user userCorpusId listId ctype mfslw = do
buildSocialList :: ( HasNodeError err buildSocialList :: ( HasNodeError err
, HasValidationError err , HasValidationError err
, HasTreeError err , HasTreeError err
, HasNodeStory env err m
, MkCorpus c , MkCorpus c
, HasNLPServer env
) )
=> GargConfig => Lang
-> NLPServerConfig
-> Lang
-> User -> User
-> CorpusId -> CorpusId
-> ListId -> ListId
-> Maybe c -> Maybe c
-> Maybe FlowSocialListWith -> Maybe FlowSocialListWith
-> DBUpdate err () -> m ()
buildSocialList cfg nlpServer l user userCorpusId listId ctype = \case buildSocialList l user userCorpusId listId ctype = \case
Just (NoList _) -> pure () Just (NoList _) -> pure ()
mfslw -> do mfslw -> do
-- User List Flow cfg <- view hasConfig
(masterUserId, _masterRootId, masterCorpusId) nlpServer <- view (nlpServerGet l)
<- getOrMkRootWithCorpus cfg MkCorpusUserMaster ctype (masterUserId, masterCorpusId, ngs) <- runDBTx $ do
-- User List Flow
(master_user_id, _masterRootId, master_corpus_id)
<- getOrMkRootWithCorpus cfg MkCorpusUserMaster ctype
let gp = GroupWithPosTag l nlpServer HashMap.empty let gp = GroupWithPosTag l nlpServer HashMap.empty
ngs <- buildNgramsLists user userCorpusId masterCorpusId mfslw gp (master_user_id, master_corpus_id,) <$> buildNgramsLists user userCorpusId master_corpus_id mfslw gp
-- printDebug "flowCorpusUser:ngs" ngs -- printDebug "flowCorpusUser:ngs" ngs
_userListId <- flowList_DbRepo listId ngs _userListId <- flowList_DbRepo listId ngs
_mastListId <- getOrMkList masterCorpusId masterUserId _mastListId <- runDBTx $ getOrMkList masterCorpusId masterUserId
pure () pure ()
-- FIME(adn): the use of 'extractNgramsT' is iffy and problematic -- we shouldn't
-- be contacting the NLP server in the middle of some DB ops! we should extract
-- the tokens /before/ inserting things into the DB.
insertMasterDocs :: ( HasNodeError err insertMasterDocs :: ( HasNodeError err
, FlowCorpus a , FlowCorpus a
, MkCorpus c , MkCorpus c
, IsDBCmd env err m
) )
=> GargConfig => GargConfig
-> NLPServerConfig -> NLPServerConfig
-> Maybe c -> Maybe c
-> TermType Lang -> TermType Lang
-> [a] -> [a]
-> DBUpdate err [DocId] -> m [DocId]
insertMasterDocs cfg nlpServer c lang hs = do insertMasterDocs cfg nlpServer c lang hs = do
(masterUserId, _, masterCorpusId) <- getOrMkRootWithCorpus cfg MkCorpusUserMaster c
(ids', documentsWithId) <- insertDocs masterUserId masterCorpusId (map (toNode masterUserId Nothing) hs ) (masterUserId, masterCorpusId, documentsWithId, ids') <- runDBTx $ do
_ <- Doc.add masterCorpusId ids' (master_user_id, _, master_corpus_id) <- getOrMkRootWithCorpus cfg MkCorpusUserMaster c
(ids_prime, documents_with_id) <- insertDocs master_user_id master_corpus_id (map (toNode master_user_id Nothing) hs )
_ <- Doc.add master_corpus_id ids_prime
pure (master_user_id, master_corpus_id, documents_with_id, ids_prime)
-- TODO -- TODO
-- create a corpus with database name (CSV or PubMed) -- create a corpus with database name (CSV or PubMed)
-- add documents to the corpus (create node_node link) -- add documents to the corpus (create node_node link)
...@@ -438,10 +447,10 @@ insertMasterDocs cfg nlpServer c lang hs = do ...@@ -438,10 +447,10 @@ insertMasterDocs cfg nlpServer c lang hs = do
(extractNgramsT nlpServer $ withLang lang documentsWithId) (extractNgramsT nlpServer $ withLang lang documentsWithId)
(map (B.first contextId2NodeId) documentsWithId) (map (B.first contextId2NodeId) documentsWithId)
lId <- getOrMkList masterCorpusId masterUserId runDBTx $ do
_ <- saveDocNgramsWith lId mapNgramsDocs' lId <- getOrMkList masterCorpusId masterUserId
_ <- saveDocNgramsWith lId mapNgramsDocs'
pure $ map contextId2NodeId ids' pure $ map contextId2NodeId ids'
saveDocNgramsWith :: ListId saveDocNgramsWith :: ListId
......
...@@ -87,9 +87,9 @@ docNgrams lang ts doc = ...@@ -87,9 +87,9 @@ docNgrams lang ts doc =
documentIdWithNgrams :: HasNodeError err documentIdWithNgrams :: HasNodeError err
=> ( a => ( a
-> DBTx err r (HashMap.HashMap b (Map NgramsType TermsWeight, TermsCount)) ) -> DBCmd err (HashMap.HashMap b (Map NgramsType TermsWeight, TermsCount)) )
-> [Indexed NodeId a] -> [Indexed NodeId a]
-> DBTx err r [DocumentIdWithNgrams a b] -> DBCmd err [DocumentIdWithNgrams a b]
documentIdWithNgrams f = traverse toDocumentIdWithNgrams documentIdWithNgrams f = traverse toDocumentIdWithNgrams
where where
toDocumentIdWithNgrams d = do toDocumentIdWithNgrams d = do
......
...@@ -34,13 +34,14 @@ import Gargantext.Core.Mail.Types (HasMail, mailSettings) ...@@ -34,13 +34,14 @@ import Gargantext.Core.Mail.Types (HasMail, mailSettings)
import Gargantext.Core.Types.Individu import Gargantext.Core.Types.Individu
import Gargantext.Database.Action.Flow (getOrMkRoot) import Gargantext.Database.Action.Flow (getOrMkRoot)
import Gargantext.Database.Admin.Types.Node import Gargantext.Database.Admin.Types.Node
import Gargantext.Database.Prelude (DBCmd, DBCmdExtra, IsDBCmdExtra, DBCmdWithEnv) import Gargantext.Database.Prelude
import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..), nodeError, NodeError(..)) import Gargantext.Database.Query.Table.Node.Error (HasNodeError(..), nodeError, NodeError(..))
import Gargantext.Database.Query.Table.User import Gargantext.Database.Query.Table.User
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Prelude.Crypto.Pass.User (gargPass) import Gargantext.Prelude.Crypto.Pass.User (gargPass)
import Gargantext.Core.Config.Mail (MailConfig) import Gargantext.Core.Config.Mail (MailConfig)
import qualified Data.List.NonEmpty as NE import qualified Data.List.NonEmpty as NE
import Gargantext.Core.Config (HasConfig(..))
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- | Creates a new 'User' from the input 'EmailAddress', which needs to -- | Creates a new 'User' from the input 'EmailAddress', which needs to
...@@ -78,8 +79,10 @@ new_users :: (HasNodeError err) ...@@ -78,8 +79,10 @@ new_users :: (HasNodeError err)
-> DBCmdWithEnv env err (NonEmpty UserId) -> DBCmdWithEnv env err (NonEmpty UserId)
new_users us = do new_users us = do
us' <- liftBase $ mapM toUserHash us us' <- liftBase $ mapM toUserHash us
void $ insertUsers $ NE.map toUserWrite us' cfg <- view hasConfig
mapM (fmap fst . getOrMkRoot) $ NE.map (\u -> UserName (_nu_username u)) us runDBTx $ do
void $ insertUsers $ NE.map toUserWrite us'
mapM (fmap fst . getOrMkRoot cfg) $ NE.map (\u -> UserName (_nu_username u)) us
------------------------------------------------------------------------ ------------------------------------------------------------------------
newUsers :: (IsDBCmdExtra env err m, MonadRandom m, HasNodeError err, HasMail env) newUsers :: (IsDBCmdExtra env err m, MonadRandom m, HasNodeError err, HasMail env)
...@@ -110,11 +113,13 @@ guessUserName n = case splitOn "@" n of ...@@ -110,11 +113,13 @@ guessUserName n = case splitOn "@" n of
------------------------------------------------------------------------ ------------------------------------------------------------------------
newUsers' :: (HasNodeError err) newUsers' :: (HasNodeError err)
=> MailConfig -> NonEmpty (NewUser GargPassword) -> DBCmdWithEnv env err (NonEmpty UserId) => MailConfig -> NonEmpty (NewUser GargPassword) -> DBCmdWithEnv env err (NonEmpty UserId)
newUsers' cfg us = do newUsers' mcfg us = do
us' <- liftBase $ mapM toUserHash us us' <- liftBase $ mapM toUserHash us
void $ insertUsers $ NE.map toUserWrite us' cfg <- view hasConfig
urs <- mapM (fmap fst . getOrMkRoot) $ map (\u -> UserName (_nu_username u)) us urs <- runDBTx $ do
_ <- mapM (\u -> mail cfg (Invitation u)) us void $ insertUsers $ NE.map toUserWrite us'
mapM (fmap fst . getOrMkRoot cfg) $ map (\u -> UserName (_nu_username u)) us
_ <- mapM (\u -> mail mcfg (Invitation u)) us
-- printDebug "newUsers'" us -- printDebug "newUsers'" us
pure urs pure urs
...@@ -124,7 +129,7 @@ updateUser :: HasNodeError err ...@@ -124,7 +129,7 @@ updateUser :: HasNodeError err
=> SendEmail -> MailConfig -> NewUser GargPassword -> DBCmdExtra err Int64 => SendEmail -> MailConfig -> NewUser GargPassword -> DBCmdExtra err Int64
updateUser (SendEmail send) cfg u = do updateUser (SendEmail send) cfg u = do
u' <- liftBase $ toUserHash u u' <- liftBase $ toUserHash u
n <- updateUserDB $ toUserWrite u' n <- runDBTx $ updateUserDB $ toUserWrite u'
when send $ mail cfg (PassUpdate u) when send $ mail cfg (PassUpdate u)
pure n pure n
...@@ -138,7 +143,7 @@ _updateUsersPassword us = do ...@@ -138,7 +143,7 @@ _updateUsersPassword us = do
pure 1 pure 1
------------------------------------------------------------------------ ------------------------------------------------------------------------
_rmUser :: HasNodeError err => User -> DBCmd err Int64 _rmUser :: HasNodeError err => User -> DBUpdate err Int64
_rmUser (UserName un) = deleteUsers [un] _rmUser (UserName un) = deleteUsers [un]
_rmUser _ = nodeError NotImplYet _rmUser _ = nodeError NotImplYet
......
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