Update README.md
[gargantext.git] / src / Gargantext / API / Routes.hs
index 2071bb7b1a9b99c9b5f86b41c64a1f00b42b8b3d..7251f95dbef3b2cb2c98c2873b318a73d3d2746d 100644 (file)
@@ -9,20 +9,15 @@ Portability : POSIX
 
 -}
 
-
-
 {-# LANGUAGE ConstraintKinds      #-}
 {-# LANGUAGE TypeOperators        #-}
 {-# LANGUAGE KindSignatures       #-}
 {-# LANGUAGE ScopedTypeVariables  #-}
 {-# LANGUAGE TypeFamilies         #-}
 
----------------------------------------------------------------------
 module Gargantext.API.Routes
       where
----------------------------------------------------------------------
 
--- import qualified Gargantext.API.Search as Search
 import Control.Concurrent (threadDelay)
 import Control.Lens (view)
 import Data.Text (Text)
@@ -30,34 +25,36 @@ import Data.Validity
 import Servant
 import Servant.Auth as SA
 import Servant.Auth.Swagger ()
-import Servant.Job.Async
 import Servant.Swagger.UI
 
-import qualified Gargantext.API.Ngrams.List              as List
-import qualified Gargantext.API.Node.Contact             as Contact
-import qualified Gargantext.API.Node.Corpus.Annuaire     as Annuaire
-import qualified Gargantext.API.Node.Corpus.Export       as CorpusExport
-import qualified Gargantext.API.Node.Corpus.Export.Types as CorpusExport
-import qualified Gargantext.API.Node.Corpus.New          as New
-import qualified Gargantext.API.Node.Document.Export       as DocumentExport
-import qualified Gargantext.API.Node.Document.Export.Types as DocumentExport
-import qualified Gargantext.API.Public                   as Public
+import Gargantext.API.Admin.Auth (ForgotPasswordAPI, ForgotPasswordAsyncAPI, withAccess)
 import Gargantext.API.Admin.Auth.Types (AuthRequest, AuthResponse, AuthenticatedUser(..), PathId(..))
-import Gargantext.API.Admin.Auth (withAccess)
+import Gargantext.API.Admin.EnvTypes (Env, GargJob(..))
 import Gargantext.API.Admin.FrontEnd (FrontEndAPI)
+import Gargantext.API.Context
 import Gargantext.API.Count  (CountAPI, count, Query)
-import qualified Gargantext.API.GraphQL as GraphQL
 import Gargantext.API.Job (jobLogInit)
 import Gargantext.API.Ngrams (TableNgramsApi, apiNgramsTableDoc)
 import Gargantext.API.Node
 import Gargantext.API.Prelude
 import Gargantext.Core.Types.Individu (User(..))
 import Gargantext.Core.Viz.Graph.API
-import Gargantext.Database.Prelude (HasConfig(..))
 import Gargantext.Database.Admin.Types.Hyperdata
 import Gargantext.Database.Admin.Types.Node
+import Gargantext.Database.Prelude (HasConfig(..))
 import Gargantext.Prelude
 import Gargantext.Prelude.Config (gc_max_docs_scrapers)
+import Gargantext.Utils.Jobs (serveJobsAPI)
+import qualified Gargantext.API.GraphQL                    as GraphQL
+import qualified Gargantext.API.Ngrams.List                as List
+import qualified Gargantext.API.Node.Contact               as Contact
+import qualified Gargantext.API.Node.Corpus.Annuaire       as Annuaire
+import qualified Gargantext.API.Node.Corpus.Export         as CorpusExport
+import qualified Gargantext.API.Node.Corpus.Export.Types   as CorpusExport
+import qualified Gargantext.API.Node.Corpus.New            as New
+import qualified Gargantext.API.Node.Document.Export       as DocumentExport
+import qualified Gargantext.API.Node.Document.Export.Types as DocumentExport
+import qualified Gargantext.API.Public                     as Public
 
 
 type GargAPI = "api" :> Summary "API " :> GargAPIVersion
@@ -76,6 +73,8 @@ type GargAPI' =
                 "auth"  :> Summary "AUTH API"
                         :> ReqBody '[JSON] AuthRequest
                         :> Post    '[JSON] AuthResponse
+          :<|> "forgot-password" :> ForgotPasswordAPI
+          :<|> "async" :> "forgot-password" :> ForgotPasswordAsyncAPI
           :<|> GargVersion
                    -- TODO-ACCESS here we want to request a particular header for
            -- auth and capabilities.
@@ -101,6 +100,11 @@ type GargPrivateAPI' =
                            :> Capture "node_id" NodeId
                            :> NodeAPI HyperdataAny
 
+           -- Context endpoint
+           :<|> "context"  :> Summary "Node endpoint"
+                           :> Capture "node_id" ContextId
+                           :> ContextAPI HyperdataAny
+
            -- Corpus endpoints
            :<|> "corpus"   :> Summary "Corpus endpoint"
                            :> Capture "corpus_id" CorpusId
@@ -216,10 +220,12 @@ serverGargAdminAPI =  roots
                  :<|> nodesAPI
 
 
-serverPrivateGargAPI' :: AuthenticatedUser -> GargServer GargPrivateAPI'
+serverPrivateGargAPI'
+  :: AuthenticatedUser -> ServerT GargPrivateAPI' (GargM Env GargError)
 serverPrivateGargAPI' (AuthenticatedUser (NodeId uid))
        =  serverGargAdminAPI
      :<|> nodeAPI     (Proxy :: Proxy HyperdataAny)      uid
+     :<|> contextAPI  (Proxy :: Proxy HyperdataAny)      uid
      :<|> nodeAPI     (Proxy :: Proxy HyperdataCorpus)   uid
      :<|> nodeNodeAPI (Proxy :: Proxy HyperdataAny)      uid
      :<|> CorpusExport.getCorpus   -- uid
@@ -268,47 +274,35 @@ waitAPI n = do
   pure $ "Waited: " <> (cs $ show n)
 ----------------------------------------
 
-addCorpusWithQuery :: User -> GargServer New.AddWithQuery
+addCorpusWithQuery :: User -> ServerT New.AddWithQuery (GargM Env GargError)
 addCorpusWithQuery user cid =
-  serveJobsAPI $
-    JobFunction (\q log' -> do
-      limit <- view $ hasConfig . gc_max_docs_scrapers
-      New.addToCorpusWithQuery user cid q (Just limit) (liftBase . log')
+  serveJobsAPI AddCorpusQueryJob $ \q log' -> do
+    limit <- view $ hasConfig . gc_max_docs_scrapers
+    New.addToCorpusWithQuery user cid q (Just limit) (liftBase . log')
       {- let log' x = do
         printDebug "addToCorpusWithQuery" x
         liftBase $ log x
       -}
-      )
 
-{-
-addWithFile :: GargServer New.AddWithFile
-addWithFile cid i f =
-  serveJobsAPI $
-    JobFunction (\_i log -> New.addToCorpusWithFile cid i f (liftBase . log))
--}
-
-addCorpusWithForm :: User -> GargServer New.AddWithForm
+addCorpusWithForm :: User -> ServerT New.AddWithForm (GargM Env GargError)
 addCorpusWithForm user cid =
-  serveJobsAPI $
-    JobFunction (\i log' ->
+  serveJobsAPI AddCorpusFormJob $ \i log' ->
       let
         log'' x = do
-          printDebug "[addToCorpusWithForm] " x
+          --printDebug "[addToCorpusWithForm] " x
           liftBase $ log' x
-      in New.addToCorpusWithForm user cid i log'' (jobLogInit 3))
+      in New.addToCorpusWithForm user cid i log'' (jobLogInit 3)
 
-addCorpusWithFile :: User -> GargServer New.AddWithFile
+addCorpusWithFile :: User -> ServerT New.AddWithFile (GargM Env GargError)
 addCorpusWithFile user cid =
-  serveJobsAPI $
-    JobFunction (\i log' ->
+  serveJobsAPI AddCorpusFileJob $ \i log' ->
       let
         log'' x = do
           printDebug "[addToCorpusWithFile]" x
           liftBase $ log' x
-      in New.addToCorpusWithFile user cid i log'')
+      in New.addToCorpusWithFile user cid i log''
 
-addAnnuaireWithForm :: GargServer Annuaire.AddWithForm
+addAnnuaireWithForm :: ServerT Annuaire.AddWithForm (GargM Env GargError)
 addAnnuaireWithForm cid =
-  serveJobsAPI $
-    JobFunction (\i log' -> Annuaire.addToAnnuaireWithForm cid i (liftBase . log'))
-
+  serveJobsAPI AddAnnuaireFormJob $ \i log' ->
+    Annuaire.addToAnnuaireWithForm cid i (liftBase . log')