refactor: untangle query logic from request logic
This commit is contained in:
committed by
Steve Chavez
parent
e564ed6e3e
commit
b5080fa2d7
+18
-16
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user