module Database.CouchDB.Conduit.DB (
couchPutDB,
couchPutDB_,
couchDeleteDB,
couchReplicateDB,
couchSecureDB
) where
import qualified Data.ByteString as B
import qualified Data.Aeson as A
import Data.Conduit (ResourceT)
import qualified Network.HTTP.Conduit as H
import qualified Network.HTTP.Types as HT
import Database.CouchDB.Conduit (MonadCouch(..), Path)
import Database.CouchDB.Conduit.LowLevel (couch, protect, protect')
couchPutDB :: MonadCouch m => ResourceT m ()
couchPutDB = couch HT.methodPut id [] []
(H.RequestBodyBS B.empty) protect'
>> return ()
couchPutDB_ :: MonadCouch m => ResourceT m ()
couchPutDB_ = couch HT.methodPut id [] []
(H.RequestBodyBS B.empty)
(protect [200, 201, 202, 304, 412] return)
>> return ()
couchDeleteDB :: MonadCouch m => ResourceT m ()
couchDeleteDB = couch HT.methodDelete id [] []
(H.RequestBodyBS B.empty) protect'
>> return ()
couchReplicateDB :: MonadCouch m =>
B.ByteString
-> B.ByteString
-> Bool
-> Bool
-> Bool
-> ResourceT m ()
couchReplicateDB source target createTarget continuous cancel =
couch HT.methodPost (const "_replicate") [] []
reqBody protect'
>> return ()
where
reqBody = H.RequestBodyLBS $ A.encode $ A.object [
"source" A..= source,
"target" A..= target,
"create_target" A..= createTarget,
"continuous" A..= continuous,
"cancel" A..= cancel ]
couchSecureDB :: MonadCouch m =>
Path
-> [B.ByteString]
-> [B.ByteString]
-> [B.ByteString]
-> [B.ByteString]
-> ResourceT m ()
couchSecureDB p adminRoles adminNames readersRoles readersNames =
couch HT.methodPut (const $ p `B.append` "/_security") [] []
reqBody protect'
>> return ()
where
reqBody = H.RequestBodyLBS $ A.encode $ A.object [
"admins" A..= A.object [ "roles" A..= adminRoles,
"names" A..= adminNames ],
"readers" A..= A.object [ "roles" A..= readersRoles,
"names" A..= readersNames ] ]