@@ -13,6 +13,7 @@ module PostgREST.ApiRequest
13
13
, DbAction (.. )
14
14
, Payload (.. )
15
15
, userApiRequest
16
+ , userPreferences
16
17
) where
17
18
18
19
import qualified Data.Aeson as JSON
@@ -127,10 +128,8 @@ data ApiRequest = ApiRequest {
127
128
}
128
129
129
130
-- | Examines HTTP request and translates it into user intent.
130
- --
131
- -- TimezoneNames are used by Prefer: timezone
132
- userApiRequest :: AppConfig -> Request -> RequestBody -> TimezoneNames -> Either ApiRequestError ApiRequest
133
- userApiRequest conf req reqBody timezones = do
131
+ userApiRequest :: AppConfig -> Preferences. Preferences -> Request -> RequestBody -> Either ApiRequestError ApiRequest
132
+ userApiRequest conf prefs req reqBody = do
134
133
resource <- getResource conf $ pathInfo req
135
134
(schema, negotiatedByProfile) <- getSchema conf hdrs method
136
135
act <- getAction resource schema method
@@ -142,7 +141,7 @@ userApiRequest conf req reqBody timezones = do
142
141
, iRange = ranges
143
142
, iTopLevelRange = topLevelRange
144
143
, iPayload = payload
145
- , iPreferences = Preferences. fromHeaders (configDbTxAllowOverride conf) timezones hdrs
144
+ , iPreferences = prefs
146
145
, iQueryParams = qPrms
147
146
, iColumns = columns
148
147
, iHeaders = iHdrs
@@ -163,6 +162,10 @@ userApiRequest conf req reqBody timezones = do
163
162
contentMediaType = maybe MTApplicationJSON MediaType. decodeMediaType $ lookupHeader " content-type"
164
163
actIsInvokeSafe x = case x of {ActDb (ActRoutine _ (InvRead _)) -> True ; _ -> False }
165
164
165
+ -- | Parses the Prefer header
166
+ userPreferences :: AppConfig -> Request -> TimezoneNames -> Preferences. Preferences
167
+ userPreferences conf req timezones = Preferences. fromHeaders (configDbTxAllowOverride conf) timezones $ requestHeaders req
168
+
166
169
getResource :: AppConfig -> [Text ] -> Either ApiRequestError Resource
167
170
getResource AppConfig {configOpenApiMode, configDbRootSpec} = \ case
168
171
[] ->
0 commit comments