Commit 02eb40eb authored by Alexandre Delanoë's avatar Alexandre Delanoë

[REFACT] Types

parent 2f672573
......@@ -132,7 +132,7 @@ import Gargantext.Database.Admin.Types.Node (NodeType(..))
import Gargantext.Database.Prelude (HasConnectionPool, HasConfig)
import Gargantext.Database.Query.Table.Node.Error (HasNodeError)
import Gargantext.Database.Query.Table.Node.Select
import Gargantext.Database.Query.Table.Ngrams hiding (NgramsType(..), ngrams, ngramsType, ngrams_terms)
import Gargantext.Database.Query.Table.Ngrams hiding (NgramsType(..), ngramsType, ngrams_terms)
import qualified Gargantext.Database.Query.Table.Ngrams as TableNgrams
import Gargantext.Database.Query.Table.Node (getNode)
import Gargantext.Database.Schema.Node (node_id, node_parentId, node_userId)
......
......@@ -20,6 +20,7 @@ import Gargantext.Database.Prelude (Cmd)
import Gargantext.Database.Query.Table.NodeNodeNgrams
import Gargantext.Database.Schema.Ngrams
import Gargantext.Database.Schema.Node
import Gargantext.Database.Types
import Gargantext.Prelude
import qualified Data.Map as DM
......@@ -81,10 +82,10 @@ insertDocNgramsOn cId dn =
$ (map (docNgrams2nodeNodeNgrams cId) dn)
insertDocNgrams :: CorpusId
-> Map (NgramsIndexed Ngrams) (Map NgramsType (Map NodeId Int))
-> Map (Indexed Ngrams) (Map NgramsType (Map NodeId Int))
-> Cmd err Int
insertDocNgrams cId m =
insertDocNgramsOn cId [ DocNgrams n (_ngramsId ng) (ngramsTypeId t) (fromIntegral i)
insertDocNgramsOn cId [ DocNgrams n (_index ng) (ngramsTypeId t) (fromIntegral i)
| (ng, t2n2i) <- DM.toList m
, (t, n2i) <- DM.toList t2n2i
, (n, i) <- DM.toList n2i
......
......@@ -33,6 +33,7 @@ import Gargantext.Database.Prelude (runPGSQuery, formatPGSQuery)
import Gargantext.Database.Query.Table.NodeNodeNgrams
import Gargantext.Database.Schema.Ngrams
import Gargantext.Database.Schema.Prelude
import Gargantext.Database.Types
import Gargantext.Prelude
queryNgramsTable :: Query NgramsRead
......@@ -64,10 +65,10 @@ _dbGetNgramsDb = runOpaQuery queryNgramsTable
-- TODO-ACCESS: access must not be checked here but when insertNgrams is called.
insertNgrams :: [Ngrams] -> Cmd err (Map NgramsTerms NgramsId)
insertNgrams ns = fromList <$> map (\(NgramsIndexed t i) -> (t, i)) <$> (insertNgrams' ns)
insertNgrams ns = fromList <$> map (\(Indexed t i) -> (t, i)) <$> (insertNgrams' ns)
-- TODO-ACCESS: access must not be checked here but when insertNgrams' is called.
insertNgrams' :: [Ngrams] -> Cmd err [NgramsIndexed Text]
insertNgrams' :: [Ngrams] -> Cmd err [Indexed Text]
insertNgrams' ns = runPGSQuery queryInsertNgrams (PGS.Only $ Values fields ns)
where
fields = map (\t -> QualifiedIdentifier Nothing t) ["text", "int4"]
......
......@@ -17,10 +17,10 @@ module Gargantext.Database.Query.Table.NgramsPostag
where
import Data.Text (Text)
import Gargantext.Database.Prelude (Cmd)
import Gargantext.Database.Prelude (runPGSQuery)
import Gargantext.Database.Prelude (Cmd, runPGSQuery)
import Gargantext.Database.Schema.Ngrams
import Gargantext.Database.Schema.Prelude
import Gargantext.Database.Types
import Gargantext.Prelude
import qualified Database.PostgreSQL.Simple as PGS
......@@ -37,7 +37,7 @@ type NgramsPostagInsert = ( Int
)
insertNgramsPostag :: [NgramsPostagInsert] -> Cmd err [NgramsIndexed Text]
insertNgramsPostag :: [NgramsPostagInsert] -> Cmd err [Indexed Text]
insertNgramsPostag ns = runPGSQuery queryInsertNgramsPostag (PGS.Only $ Values fields ns)
where
......
......@@ -32,6 +32,7 @@ import Gargantext.Prelude
import Prelude (Functor)
import Servant (FromHttpApiData, parseUrlPiece, Proxy(..))
import Text.Read (read)
import Gargantext.Database.Types
import Gargantext.Database.Schema.Prelude
import qualified Database.PostgreSQL.Simple as PGS
......@@ -70,14 +71,12 @@ ngramsTable = Table "ngrams" (pNgramsDb NgramsDB { _ngrams_id = optional "id"
}
)
-- | Main Ngrams Types
-- | Typed Ngrams
-- Typed Ngrams localize the context of the ngrams
-- ngrams in source field of document has Sources Type
-- ngrams in authors field of document has Authors Type
-- ngrams in text (title or abstract) of documents has Terms Type
-- ngrams in source field of document has Sources Type
-- ngrams in authors field of document has Authors Type
-- ngrams in text fields of documents has Terms Type (i.e. either title or abstract)
data NgramsType = Authors | Institutes | Sources | NgramsTerms
deriving (Eq, Show, Read, Ord, Enum, Bounded, Generic)
......@@ -177,26 +176,14 @@ makeLenses ''NgramsT
instance Functor NgramsT where
fmap = over ngramsT
-----------------------------------------------------------------------
data NgramsIndexed a =
NgramsIndexed
{ _ngrams :: a
, _ngramsId :: NgramsId
} deriving (Show, Generic, Eq, Ord)
makeLenses ''NgramsIndexed
instance (FromField a) => PGS.FromRow (NgramsIndexed a) where
fromRow = NgramsIndexed <$> field <*> field
------------------------------------------------------------------------
withMap :: Map NgramsTerms NgramsId -> NgramsTerms -> NgramsId
withMap m n = maybe (panic "withMap: should not happen") identity (lookup n m)
indexNgramsT :: Map NgramsTerms NgramsId -> NgramsT Ngrams -> NgramsT (NgramsIndexed Ngrams)
indexNgramsT :: Map NgramsTerms NgramsId -> NgramsT Ngrams -> NgramsT (Indexed Ngrams)
indexNgramsT = fmap . indexNgramsWith . withMap
indexNgrams :: Map NgramsTerms NgramsId -> Ngrams -> (NgramsIndexed Ngrams)
indexNgrams :: Map NgramsTerms NgramsId -> Ngrams -> Indexed Ngrams
indexNgrams = indexNgramsWith . withMap
indexNgramsWith :: (NgramsTerms -> NgramsId) -> Ngrams -> NgramsIndexed Ngrams
indexNgramsWith f n = NgramsIndexed n (f $ _ngramsTerms n)
indexNgramsWith :: (NgramsTerms -> NgramsId) -> Ngrams -> Indexed Ngrams
indexNgramsWith f n = Indexed n (f $ _ngramsTerms n)
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