|
1 | 1 | module Web.Hyperbole.Effect.Query where |
2 | 2 |
|
| 3 | +import Data.ByteString qualified as BS |
| 4 | +import Data.Maybe (fromMaybe) |
3 | 5 | import Data.String.Conversions (cs) |
4 | 6 | import Effectful |
5 | 7 | import Effectful.Dispatch.Dynamic (send) |
6 | | -import Web.Hyperbole.Data.QueryData (FromParam (..), FromQuery (..), Param, QueryData (..), ToParam (..), ToQuery (..)) |
| 8 | +import Web.Hyperbole.Data.QueryData (FromParam (..), FromQuery (..), Param, QueryData (..), ToParam (..), ToQuery (..), queryData) |
7 | 9 | import Web.Hyperbole.Data.QueryData qualified as QueryData |
8 | 10 | import Web.Hyperbole.Effect.Hyperbole (Hyperbole (..)) |
9 | | -import Web.Hyperbole.Effect.Server (Client (..), Response (..), ResponseError (..)) |
| 11 | +import Web.Hyperbole.Effect.Request (request) |
| 12 | +import Web.Hyperbole.Effect.Server (Client (..), Request (..), Response (..), ResponseError (..)) |
10 | 13 | import Prelude |
11 | 14 |
|
12 | 15 |
|
@@ -77,10 +80,23 @@ deleteParam key = do |
77 | 80 | -- | Return the query from 'Request' as a 'QueryData' |
78 | 81 | queryParams :: (Hyperbole :> es) => Eff es QueryData |
79 | 82 | queryParams = do |
80 | | - (.query) <$> send GetClient |
| 83 | + cq <- clientQuery |
| 84 | + rq <- requestQuery |
| 85 | + pure $ fromMaybe rq cq |
| 86 | + where |
| 87 | + clientQuery = (.query) <$> send GetClient |
| 88 | + |
| 89 | + requestQuery :: (Hyperbole :> es) => Eff es QueryData |
| 90 | + requestQuery = do |
| 91 | + r <- request |
| 92 | + pure $ queryData $ filter (not . isSystemParam) r.query |
| 93 | + |
| 94 | + isSystemParam (key, _) = |
| 95 | + "hyp-" `BS.isPrefixOf` key |
81 | 96 |
|
82 | 97 |
|
83 | 98 | modifyQuery :: (Hyperbole :> es) => (QueryData -> QueryData) -> Eff es () |
84 | | -modifyQuery f = |
| 99 | +modifyQuery f = do |
| 100 | + q <- queryParams |
85 | 101 | send $ ModClient $ \client -> |
86 | | - Client{query = f client.query, session = client.session} |
| 102 | + Client{query = Just $ f q, session = client.session} |
0 commit comments