feat(mongodb): mongodb dummy data and initialization
feat(utils, execute): executeRoot for running as sudo, by default runs as current user
This commit is contained in:
54
src/System/Serverman/Actions/MongoDB.hs
Normal file
54
src/System/Serverman/Actions/MongoDB.hs
Normal file
@@ -0,0 +1,54 @@
|
||||
{-# LANGUAGE NamedFieldPuns #-}
|
||||
|
||||
module System.Serverman.Actions.MongoDB (mongodb) where
|
||||
import System.Serverman.Actions.Database
|
||||
import System.Serverman.Utils hiding (execute)
|
||||
import Database.MongoDB
|
||||
import qualified Data.ByteString.Char8 as BS
|
||||
import Data.List hiding (delete)
|
||||
import qualified Data.Text as T
|
||||
import Control.Monad
|
||||
import System.IO.Error
|
||||
|
||||
mongodb :: DatabaseParams -> IO ()
|
||||
mongodb (DatabaseParams { database, dummyData, databaseHost }) = do
|
||||
result <- tryIOError $ connect (readHostPort databaseHost)
|
||||
|
||||
case result of
|
||||
Right pipe -> do
|
||||
e <- access pipe master (T.pack database) run
|
||||
|
||||
close pipe
|
||||
Left err -> do
|
||||
putStrLn $ show err
|
||||
putStrLn $ "[Error] could not connect to MongoDB server " ++ databaseHost
|
||||
|
||||
where
|
||||
run = do
|
||||
when dummyData $ do
|
||||
clearCollection
|
||||
insertToCollection
|
||||
return ()
|
||||
|
||||
clearCollection = delete (select [] (T.pack collectionName))
|
||||
where (collectionName, _, _) = dummy
|
||||
|
||||
insertToCollection = insertMany (T.pack collectionName) records
|
||||
where
|
||||
(collectionName, definitions, rows) = dummy
|
||||
records = map (\row -> zipWith (\def value -> def =: row) (map T.pack definitions) row) rows
|
||||
|
||||
|
||||
createDummyTables = createTable dummy
|
||||
where
|
||||
createTable (tableName, columns, rows) = "CREATE TABLE IF NOT EXISTS " ++ tableName ++ "(" ++ intercalate "," (map columnDef columns) ++ ")";
|
||||
columnDef "children" = "children INT"
|
||||
columnDef "birth_date" = "birth_date DATETIME"
|
||||
columnDef "gender" = "gender ENUM('Male', 'Female')"
|
||||
columnDef name = name ++ " VARCHAR(255)"
|
||||
|
||||
insertToDummyTables = insertTable dummy
|
||||
where
|
||||
insertTable (tableName, _, rows) = "INSERT INTO " ++ tableName ++ " VALUES " ++ intercalate "," (map insertRow rows)
|
||||
insertRow row = "('" ++ intercalate "','" row ++ "')"
|
||||
|
||||
Reference in New Issue
Block a user