[STACK] upgrade.
[gargantext.git] / src / Gargantext / Database.hs
index ab09ef109fa86767dc270579d650120c4667a95d..3e6fe7d4a524d292b1a0ce31e6703e7b26403554 100644 (file)
 {-|
 Module      : Gargantext.Database
-Description : Main commands of BASHQL a Domain Specific Language to deal with Gargantext Database.
+Description : Tools for Database
 Copyright   : (c) CNRS, 2017-Present
 License     : AGPL + CECILL v3
 Maintainer  : team@gargantext.org
 Stability   : experimental
 Portability : POSIX
 
-* BASHQL = functional (Bash * SQL)
+All Database related stuff here.
 
-* Which language to chose when working with a database ? To make it
-simple, instead of all common Object Relational Mapping (ORM) [1]
-strategy used nowadays inspired more by object logic than functional
-logic, the semantics of BASHQL with focus on the function first.
-
-* BASHQL focus on the function, i.e. use bash language function name,
-and make it with SQL behind the scene. Then BASHQL is inspired more
-by Bash language [2] than SQL and then follows its main commands as
-specification and documentation.
-
-* Main arguments:
-  1. Theoritical: database and FileSystems are each thought as a single
-  category, assumption based on theoretical work on databases by David Spivak [0].
-  2. Practical argument: basic bash commands are a daily practice among
-  developper community.
-
-* How to help ?
-  1. Choose a command you like in Bash
-  2. Implement it in Haskell-SQL according to Gargantext Shema (Tree like
-  filesystem)
-  3. Translate it in BASHQL (follow previous implementations)
-  4. Make a pull request    (enjoy the community)
-
-* Implementation strategy: Functional adapations are made to the
-gargantext languages options and SQL optimization are done continuously
-during the project. For the Haskellish part, you may be inspired by
-Turtle implementation written by Gabriel Gonzales [3] which shows how to
-write Haskell bash translations.
-
-* Semantics
-- FileSystem is now a NodeSystem where each File is a Node in a Directed Graph (DG).
-
-* References
-[0] MIT Press has published "Category theory for the sciences". The book
-can also be purchased on Amazon. Here are reviews by the MAA, by the
-AMS, and by SIAM.
-
-[1] https://en.wikipedia.org/wiki/Object-relational_mapping
-
-[2] https://en.wikipedia.org/wiki/Bash_(Unix_shell)
-
-[3] https://github.com/Gabriel439/Haskell-Turtle-Library
+Target: just import this module and nothing else to work with
+Gargantext's database.
 
 -}
 
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Gargantext.Database ( module Gargantext.Database.Utils
-                           , get
-                           , ls  , ls'
-                           , home, home'
-                           , post, post'
-                           , del , del'
+                        -- , module Gargantext.Database.Bashql
                            )
     where
 
-import Gargantext.Core.Types
-import Gargantext.Core.Types.Node
 import Gargantext.Database.Utils (connectGargandb)
-import Gargantext.Database.Node
-import Gargantext.Prelude
-import Database.PostgreSQL.Simple (Connection)
-import Data.Text (Text)
-import Opaleye hiding (FromField)
-import Data.Aeson
-import Data.ByteString (ByteString)
-import Data.List (last)
-type UserId = Int
---type NodeId = Int
-
--- List of NodeId
--- type PWD a = PWD UserId [a]
-type PWD = [NodeId]
-
--- | TODO get Children or Node
-get :: Connection -> PWD -> IO [Node Value]
-get _ [] = pure []
-get conn pwd = runQuery conn $ selectNodesWithParentID (last pwd)
-
--- | Home, need to filter with UserId
-home :: Connection -> IO PWD
-home c = map node_id <$> getNodesWithParentId c 0 Nothing
-
--- | ls == get Children
-ls :: Connection -> PWD -> IO [Node Value]
-ls = get
-
--- | TODO
--- post User
--- post Dir
--- post Corpus Parent_id (Empty|MyData)
--- post CorpusWith
--- post List
-post :: Connection -> PWD -> [NodeWrite'] -> IO Int64
-post _ [] _   = pure 0
-post _ _ []   = pure 0
-post c pth ns = mkNode c (last pth) ns
-
-rm :: Connection -> PWD -> [NodeId] -> IO Int
-rm = del
-
-del :: Connection -> PWD -> [NodeId] -> IO Int
-del _ [] _ = pure 0
-del _ _ [] = pure 0
-del c pth ns = deleteNodes c ns
-
-put :: Connection -> PWD -> [a] -> IO Int64
-put = undefined
-
--- | TODO
--- cd (Home UserId) | (Node NodeId)
--- cd Path
--- jump NodeId
--- touch Dir
-
---------------------------------------------------------------
--- Tests
---------------------------------------------------------------
-
-home' :: IO PWD
-home' = do
-  c <- connectGargandb "gargantext.ini"
-  home c
-
-ls' :: IO [Node Value]
-ls' = do
-  c <- connectGargandb "gargantext.ini"
-  h <- home c
-  ls c h
-
-post' :: IO Int64
-post'  = do
-  c <- connectGargandb "gargantext.ini"
-  h <- home c
-  let userId = 1
-  -- TODO semantic to achieve
-  -- post c h [ Corpus "name" "{}" Nothing
-  --          , Project "name" "{}" (Just [Corpus "test 2" "" Nothing])
-  --          ]
-  post c h [ node userId (last h) Corpus  "name" "{}"
-           , node userId (last h) Project "name" "{}"
-           ]
-
-del' :: [NodeId] -> IO Int
-del' ns = do
-  c <- connectGargandb "gargantext.ini"
-  h <- home c
-  del c h ns
-
-
-
+-- import Gargantext.Database.Bashql