]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/Database/Root.hs
[Database] Utils, reader Monad utils mainly.
[gargantext.git] / src / Gargantext / Database / Root.hs
1 {-|
2 Module : Gargantext.Database.Root
3 Description : Main requests to get root of users
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
8 Portability : POSIX
9 -}
10
11 {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
12 {-# OPTIONS_GHC -fno-warn-orphans #-}
13
14 {-# LANGUAGE Arrows #-}
15 {-# LANGUAGE DeriveGeneric #-}
16 {-# LANGUAGE ConstraintKinds #-}
17 {-# LANGUAGE FlexibleContexts #-}
18 {-# LANGUAGE FlexibleInstances #-}
19 {-# LANGUAGE FunctionalDependencies #-}
20 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
21 {-# LANGUAGE OverloadedStrings #-}
22 {-# LANGUAGE MultiParamTypeClasses #-}
23 {-# LANGUAGE NoImplicitPrelude #-}
24 {-# LANGUAGE TemplateHaskell #-}
25
26 module Gargantext.Database.Root where
27
28 import Database.PostgreSQL.Simple (Connection)
29 import Opaleye (restrict, (.==), Query, runQuery)
30 import Opaleye.PGTypes (pgStrictText, pgInt4)
31 import Control.Arrow (returnA)
32 import Gargantext.Prelude
33 import Gargantext.Database.Types.Node (Node, NodePoly(..), NodeType(NodeUser), HyperdataUser)
34 import Gargantext.Database.Schema.Node (NodeRead)
35 import Gargantext.Database.Schema.Node (queryNodeTable)
36 import Gargantext.Database.Schema.User (queryUserTable, UserPoly(..))
37 import Gargantext.Database.Config (nodeTypeId)
38 import Gargantext.Core.Types.Individu (Username)
39 import Gargantext.Database.Utils (Cmd(..), mkCmd)
40
41 getRootCmd :: Username -> Cmd [Node HyperdataUser]
42 getRootCmd u = mkCmd $ \c -> getRoot u c
43
44 getRoot :: Username -> Connection -> IO [Node HyperdataUser]
45 getRoot uname conn = runQuery conn (selectRoot uname)
46
47 selectRoot :: Username -> Query NodeRead
48 selectRoot username = proc () -> do
49 row <- queryNodeTable -< ()
50 users <- queryUserTable -< ()
51 restrict -< _node_typename row .== (pgInt4 $ nodeTypeId NodeUser)
52 restrict -< user_username users .== (pgStrictText username)
53 restrict -< _node_userId row .== (user_id users)
54 returnA -< row
55