refactor: untangle query logic from request logic

This commit is contained in:
steve-chavez
2022-09-26 17:28:08 -05:00
committed by Steve Chavez
parent e564ed6e3e
commit b5080fa2d7
+18 -16
View File
@@ -47,6 +47,7 @@ import qualified PostgREST.Query.Statements as Statements
import qualified PostgREST.RangeQuery as RangeQuery import qualified PostgREST.RangeQuery as RangeQuery
import qualified PostgREST.Request.ApiRequest as ApiRequest import qualified PostgREST.Request.ApiRequest as ApiRequest
import qualified PostgREST.Request.DbRequestBuilder as ReqBuilder import qualified PostgREST.Request.DbRequestBuilder as ReqBuilder
import qualified PostgREST.Request.MutateQuery as MutateRequest
import qualified PostgREST.Request.Types as ApiRequestTypes import qualified PostgREST.Request.Types as ApiRequestTypes
import qualified PostgREST.Response as Response import qualified PostgREST.Response as Response
@@ -237,7 +238,7 @@ handleRequest context@(RequestContext _ _ ApiRequest{..} _) =
handleRead :: Bool -> QualifiedIdentifier -> RequestContext -> DbHandler Wai.Response handleRead :: Bool -> QualifiedIdentifier -> RequestContext -> DbHandler Wai.Response
handleRead headersOnly identifier context@RequestContext{..} = do handleRead headersOnly identifier context@RequestContext{..} = do
req <- readRequest identifier context req <- liftEither $ readRequest identifier context
bField <- binaryField context req bField <- binaryField context req
let let
@@ -291,7 +292,8 @@ handleCreate identifier context@RequestContext{..} = do
then maybe mempty tablePKCols $ HM.lookup identifier $ dbTables ctxDbStructure then maybe mempty tablePKCols $ HM.lookup identifier $ dbTables ctxDbStructure
else mempty else mempty
resultSet <- writeQuery MutationCreate identifier True pkCols context (mutateReq, readReq) <- liftEither $ writeRequest MutationCreate identifier context pkCols
resultSet <- writeQuery mutateReq readReq True pkCols context
failNotSingular iAcceptMediaType resultSet failNotSingular iAcceptMediaType resultSet
@@ -299,7 +301,8 @@ handleCreate identifier context@RequestContext{..} = do
handleUpdate :: QualifiedIdentifier -> RequestContext -> DbHandler Wai.Response handleUpdate :: QualifiedIdentifier -> RequestContext -> DbHandler Wai.Response
handleUpdate identifier context@(RequestContext _ _ ctxApiRequest@ApiRequest{..} _) = do handleUpdate identifier context@(RequestContext _ _ ctxApiRequest@ApiRequest{..} _) = do
resultSet <- writeQuery MutationUpdate identifier False mempty context (mutateReq, readReq) <- liftEither $ writeRequest MutationUpdate identifier context mempty
resultSet <- writeQuery mutateReq readReq False mempty context
failNotSingular iAcceptMediaType resultSet failNotSingular iAcceptMediaType resultSet
failsChangesOffLimits (RangeQuery.rangeLimit iTopLevelRange) resultSet failsChangesOffLimits (RangeQuery.rangeLimit iTopLevelRange) resultSet
@@ -308,7 +311,8 @@ handleUpdate identifier context@(RequestContext _ _ ctxApiRequest@ApiRequest{..}
handleSingleUpsert :: QualifiedIdentifier -> RequestContext-> DbHandler Wai.Response handleSingleUpsert :: QualifiedIdentifier -> RequestContext-> DbHandler Wai.Response
handleSingleUpsert identifier context@(RequestContext _ ctxDbStructure ctxApiRequest _) = do handleSingleUpsert identifier context@(RequestContext _ ctxDbStructure ctxApiRequest _) = do
let pkCols = maybe mempty tablePKCols $ HM.lookup identifier $ dbTables ctxDbStructure let pkCols = maybe mempty tablePKCols $ HM.lookup identifier $ dbTables ctxDbStructure
resultSet <- writeQuery MutationSingleUpsert identifier False pkCols context (mutateReq, readReq) <- liftEither $ writeRequest MutationSingleUpsert identifier context pkCols
resultSet <- writeQuery mutateReq readReq False pkCols context
failPut resultSet failPut resultSet
pure $ Response.singleUpsertResponse ctxApiRequest resultSet pure $ Response.singleUpsertResponse ctxApiRequest resultSet
@@ -326,7 +330,8 @@ failPut RSStandard{rsQueryTotal=queryTotal} =
handleDelete :: QualifiedIdentifier -> RequestContext -> DbHandler Wai.Response handleDelete :: QualifiedIdentifier -> RequestContext -> DbHandler Wai.Response
handleDelete identifier context@(RequestContext _ _ ctxApiRequest@ApiRequest{..} _) = do handleDelete identifier context@(RequestContext _ _ ctxApiRequest@ApiRequest{..} _) = do
resultSet <- writeQuery MutationDelete identifier False mempty context (mutateReq, readReq) <- liftEither $ writeRequest MutationDelete identifier context mempty
resultSet <- writeQuery mutateReq readReq False mempty context
failNotSingular iAcceptMediaType resultSet failNotSingular iAcceptMediaType resultSet
failsChangesOffLimits (RangeQuery.rangeLimit iTopLevelRange) resultSet failsChangesOffLimits (RangeQuery.rangeLimit iTopLevelRange) resultSet
@@ -342,7 +347,7 @@ handleInvoke invMethod proc context@RequestContext{..} = do
(pdSchema proc) (pdSchema proc)
(fromMaybe (pdName proc) $ Proc.procTableName proc) (fromMaybe (pdName proc) $ Proc.procTableName proc)
req <- readRequest identifier context req <- liftEither $ readRequest identifier context
bField <- binaryField context req bField <- binaryField context req
let callReq = ReqBuilder.callRequest proc ctxApiRequest req let callReq = ReqBuilder.callRequest proc ctxApiRequest req
@@ -403,16 +408,14 @@ txMode ApiRequest{..} =
_ -> _ ->
SQL.Write SQL.Write
writeQuery :: Mutation -> QualifiedIdentifier -> Bool -> [Text] -> RequestContext -> DbHandler ResultSet writeRequest :: Mutation -> QualifiedIdentifier -> RequestContext -> [FieldName] -> Either Error (MutateRequest.MutateRequest, ReadRequest)
writeQuery mutation identifier@QualifiedIdentifier{..} isInsert pkCols context@RequestContext{..} = do writeRequest mutation identifier@QualifiedIdentifier{..} context@RequestContext{..} pkCols = do
readReq <- readRequest identifier context readReq <- readRequest identifier context
mutateReq <- ReqBuilder.mutateRequest mutation qiSchema qiName ctxApiRequest pkCols readReq
pure (mutateReq, readReq)
mutateReq <- writeQuery :: MutateRequest.MutateRequest -> ReadRequest -> Bool -> [Text] -> RequestContext -> DbHandler ResultSet
liftEither $ writeQuery mutateReq readReq isInsert pkCols RequestContext{..} = do
ReqBuilder.mutateRequest mutation qiSchema qiName ctxApiRequest
pkCols
readReq
lift . SQL.statement mempty $ lift . SQL.statement mempty $
Statements.prepareWrite Statements.prepareWrite
(QueryBuilder.readRequestToQuery readReq) (QueryBuilder.readRequestToQuery readReq)
@@ -445,9 +448,8 @@ returnsScalar :: ApiRequest.Target -> Bool
returnsScalar (TargetProc proc _) = Proc.procReturnsScalar proc returnsScalar (TargetProc proc _) = Proc.procReturnsScalar proc
returnsScalar _ = False returnsScalar _ = False
readRequest :: Monad m => QualifiedIdentifier -> RequestContext -> Handler m ReadRequest readRequest :: QualifiedIdentifier -> RequestContext -> Either Error ReadRequest
readRequest QualifiedIdentifier{..} (RequestContext AppConfig{..} dbStructure apiRequest _) = readRequest QualifiedIdentifier{..} (RequestContext AppConfig{..} dbStructure apiRequest _) =
liftEither $
ReqBuilder.readRequest qiSchema qiName configDbMaxRows ReqBuilder.readRequest qiSchema qiName configDbMaxRows
(dbRelationships dbStructure) (dbRelationships dbStructure)
apiRequest apiRequest