Disallow non-idempotent PUTs

This commit is contained in:
Joe Nelson
2014-09-10 20:44:17 -07:00
parent 9f2a01ae46
commit dd9d9cb283
+11 -11
View File
@@ -3,7 +3,7 @@
-- {{{ Imports -- {{{ Imports
module Dbapi where module Dbapi where
import Types (SqlRow) import Types (SqlRow, getRow)
import Control.Exception (try) import Control.Exception (try)
import Control.Monad (join) import Control.Monad (join)
@@ -34,7 +34,8 @@ import qualified Data.ByteString.Char8 as BS
import Database.HDBC.PostgreSQL (Connection) import Database.HDBC.PostgreSQL (Connection)
import Database.HDBC.Types (SqlError, seErrorMsg) import Database.HDBC.Types (SqlError, seErrorMsg)
import Database.HDBC.SqlValue (SqlValue(..)) import Database.HDBC.SqlValue (SqlValue(..))
import PgStructure (printTables, printColumns, primaryKeyColumns) import PgStructure (printTables, printColumns, primaryKeyColumns,
columns, Column(colName))
import qualified Data.Aeson as JSON import qualified Data.Aeson as JSON
import Data.Text (pack, unpack) import Data.Text (pack, unpack)
@@ -111,16 +112,15 @@ app conn req respond = do
then return $ responseLBS status405 [] then return $ responseLBS status405 []
"You must speficy all and only primary keys as params" "You must speficy all and only primary keys as params"
else do else do
_ <- upsert ver table row qq conn cols <- columns ver (unpack table) conn
return $ responseLBS status201 [] "" let colNames = S.fromList $ map (pack . colName) cols
-- allvals <- insert ver table row conn let specifiedCols = S.fromList $ map fst $ getRow row
-- let keyvals = allvals `intersection` fromList (zip keys $ repeat SqlNull) if colNames == specifiedCols then do
-- let params = urlEncodeVars $ map (\t -> (fst t, "eq." <> convert (snd t) :: String)) $ toList keyvals _ <- upsert ver table row qq conn
-- [ jsonContentType return $ responseLBS status201 [] ""
-- , (hLocation, "/" <> encodeUtf8 table <> "?" <> BS.pack params) else return $ responseLBS status400 []
-- ] "" "Missing column(s) in PUT request"
) )
(_, _) -> (_, _) ->
return $ responseLBS status404 [] "" return $ responseLBS status404 [] ""