{-| Module : Gargantext.Database.Schema.NodesNgramsRepo Description : NodeNgram for Ngram indexation or Lists Copyright : (c) CNRS, 2017-Present License : AGPL + CECILL v3 Maintainer : team@gargantext.org Stability : experimental Portability : POSIX -} {-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE Arrows #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TemplateHaskell #-} module Gargantext.Database.Schema.NodesNgramsRepo where import Control.Arrow (returnA) import Control.Lens.TH (makeLenses) import Data.Map.Strict.Patch (PatchMap) import Data.Profunctor.Product.TH (makeAdaptorAndInstance) import Gargantext.API.Ngrams (NgramsStatePatch, NgramsTablePatch) import Gargantext.Database.Schema.Ngrams (NgramsType) import Gargantext.Database.Types.Node (NodeId) import Gargantext.Database.Utils (mkCmd, Cmd, runOpaQuery) import Gargantext.Prelude import Opaleye data RepoDbPoly version patches = RepoDbNgrams { _rdp_version :: version , _rdp_patches :: patches } deriving (Show) type RepoDbWrite = RepoDbPoly (Column PGInt4) (Column PGJsonb) type RepoDbRead = RepoDbPoly (Column PGInt4) (Column PGJsonb) type RepoDbNgrams = RepoDbPoly Int NgramsStatePatch $(makeAdaptorAndInstance "pRepoDbNgrams" ''RepoDbPoly) makeLenses ''RepoDbPoly instance QueryRunnerColumnDefault PGJsonb (PatchMap NgramsType (PatchMap NodeId NgramsTablePatch)) where queryRunnerColumnDefault = fieldQueryRunnerColumn -- type Re repoTable :: Table RepoDbWrite RepoDbRead repoTable = Table "nodes_ngrams_repo" (pRepoDbNgrams RepoDbNgrams { _rdp_version = required "version" , _rdp_patches = required "patches" } ) selectRepo :: Cmd err [RepoDbNgrams] selectRepo = runOpaQuery selectPatches selectPatches :: Query RepoDbRead selectPatches = proc () -> do repos <- queryTable repoTable -< () returnA -< repos insertRepos :: [NgramsStatePatch] -> Cmd err Int64 insertRepos ns = mkCmd $ \conn -> runInsertMany conn repoTable (toWrite ns) where toWrite :: [NgramsStatePatch] -> [RepoDbWrite] toWrite = undefined --ns' = map (\(RepoDbNgrams v ps) -> RepoDbWrite (pgInt4 v) (pgJSONB ps)) ns