refactor: decouple module SchemaCache and ApiRequest
This commit is contained in:
committed by
Steve Chavez
parent
359e5fbf75
commit
4819520e3a
@@ -4,7 +4,6 @@ Description : PostgREST functions to translate HTTP request to a domain type cal
|
|||||||
-}
|
-}
|
||||||
{-# LANGUAGE LambdaCase #-}
|
{-# LANGUAGE LambdaCase #-}
|
||||||
{-# LANGUAGE NamedFieldPuns #-}
|
{-# LANGUAGE NamedFieldPuns #-}
|
||||||
-- TODO: This module shouldn't depend on SchemaCache
|
|
||||||
module PostgREST.ApiRequest
|
module PostgREST.ApiRequest
|
||||||
( ApiRequest(..)
|
( ApiRequest(..)
|
||||||
, InvokeMethod(..)
|
, InvokeMethod(..)
|
||||||
@@ -46,6 +45,7 @@ import Web.Cookie (parseCookies)
|
|||||||
import PostgREST.ApiRequest.QueryParams (QueryParams (..))
|
import PostgREST.ApiRequest.QueryParams (QueryParams (..))
|
||||||
import PostgREST.Config (AppConfig (..),
|
import PostgREST.Config (AppConfig (..),
|
||||||
OpenAPIMode (..))
|
OpenAPIMode (..))
|
||||||
|
import PostgREST.Config.Database (TimezoneNames)
|
||||||
import PostgREST.Error (ApiRequestError (..),
|
import PostgREST.Error (ApiRequestError (..),
|
||||||
RangeError (..))
|
RangeError (..))
|
||||||
import PostgREST.MediaType (MediaType (..))
|
import PostgREST.MediaType (MediaType (..))
|
||||||
@@ -53,7 +53,6 @@ import PostgREST.RangeQuery (NonnegRange, allRange,
|
|||||||
convertToLimitZeroRange,
|
convertToLimitZeroRange,
|
||||||
hasLimitZero,
|
hasLimitZero,
|
||||||
rangeRequested)
|
rangeRequested)
|
||||||
import PostgREST.SchemaCache (SchemaCache (..))
|
|
||||||
import PostgREST.SchemaCache.Identifiers (FieldName,
|
import PostgREST.SchemaCache.Identifiers (FieldName,
|
||||||
QualifiedIdentifier (..),
|
QualifiedIdentifier (..),
|
||||||
Schema)
|
Schema)
|
||||||
@@ -128,8 +127,10 @@ data ApiRequest = ApiRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
-- | Examines HTTP request and translates it into user intent.
|
-- | Examines HTTP request and translates it into user intent.
|
||||||
userApiRequest :: AppConfig -> Request -> RequestBody -> SchemaCache -> Either ApiRequestError ApiRequest
|
--
|
||||||
userApiRequest conf req reqBody sCache = do
|
-- TimezoneNames are used by Prefer: timezone
|
||||||
|
userApiRequest :: AppConfig -> Request -> RequestBody -> TimezoneNames -> Either ApiRequestError ApiRequest
|
||||||
|
userApiRequest conf req reqBody timezones = do
|
||||||
resource <- getResource conf $ pathInfo req
|
resource <- getResource conf $ pathInfo req
|
||||||
(schema, negotiatedByProfile) <- getSchema conf hdrs method
|
(schema, negotiatedByProfile) <- getSchema conf hdrs method
|
||||||
act <- getAction resource schema method
|
act <- getAction resource schema method
|
||||||
@@ -141,7 +142,7 @@ userApiRequest conf req reqBody sCache = do
|
|||||||
, iRange = ranges
|
, iRange = ranges
|
||||||
, iTopLevelRange = topLevelRange
|
, iTopLevelRange = topLevelRange
|
||||||
, iPayload = payload
|
, iPayload = payload
|
||||||
, iPreferences = Preferences.fromHeaders (configDbTxAllowOverride conf) (dbTimezones sCache) hdrs
|
, iPreferences = Preferences.fromHeaders (configDbTxAllowOverride conf) timezones hdrs
|
||||||
, iQueryParams = qPrms
|
, iQueryParams = qPrms
|
||||||
, iColumns = columns
|
, iColumns = columns
|
||||||
, iHeaders = iHdrs
|
, iHeaders = iHdrs
|
||||||
|
|||||||
@@ -144,8 +144,9 @@ postgrestResponse appState conf@AppConfig{..} maybeSchemaCache pgVer authResult@
|
|||||||
body <- lift $ Wai.strictRequestBody req
|
body <- lift $ Wai.strictRequestBody req
|
||||||
|
|
||||||
let jwtTime = if configServerTimingEnabled then Auth.getJwtDur req else Nothing
|
let jwtTime = if configServerTimingEnabled then Auth.getJwtDur req else Nothing
|
||||||
|
timezones = dbTimezones sCache
|
||||||
|
|
||||||
(parseTime, apiReq@ApiRequest{..}) <- withTiming $ liftEither . mapLeft Error.ApiRequestError $ ApiRequest.userApiRequest conf req body sCache
|
(parseTime, apiReq@ApiRequest{..}) <- withTiming $ liftEither . mapLeft Error.ApiRequestError $ ApiRequest.userApiRequest conf req body timezones
|
||||||
(planTime, plan) <- withTiming $ liftEither $ Plan.actionPlan iAction conf apiReq sCache
|
(planTime, plan) <- withTiming $ liftEither $ Plan.actionPlan iAction conf apiReq sCache
|
||||||
|
|
||||||
let query = Query.query conf authResult apiReq plan sCache pgVer
|
let query = Query.query conf authResult apiReq plan sCache pgVer
|
||||||
|
|||||||
Reference in New Issue
Block a user