Skip to content

Commit

Permalink
server: refactor Hasura.Metadata.Class
Browse files Browse the repository at this point in the history
- Remove `MonadMetadataStorageQueryAPI` which was only implemented by a default implementation
- Introduce `TransT` which can be used to easily derive `lift`ing implementations for `MonadBlaBlaBla` classes

PR-URL: hasura/graphql-engine-mono#8579
GitOrigin-RevId: 4f804fda7e2de5c9d75ee4df269f500ebd46b8c9
  • Loading branch information
abooij authored and hasura-bot committed Apr 3, 2023
1 parent ed4f3b7 commit 7cc33dd
Show file tree
Hide file tree
Showing 12 changed files with 103 additions and 280 deletions.
1 change: 1 addition & 0 deletions server/graphql-engine.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,7 @@ library
, Control.Monad.Circular
, Control.Monad.Memoize
, Control.Monad.Stateless
, Control.Monad.Trans.Extended
, Control.Monad.Trans.Managed
, Data.Aeson.Extended
, Data.Aeson.Kriti.Functions
Expand Down
21 changes: 21 additions & 0 deletions server/src-lib/Control/Monad/Trans/Extended.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module Control.Monad.Trans.Extended
( TransT (..),
)
where

import Control.Monad.Morph
import Data.Kind
import Prelude

-- | Utility newtype that can be used to derive type class instances just using
-- `MonadTrans`.
--
-- We often derive some `MonadBlaBla` instance for `ReaderT` by using `lift`
-- from `MonadTrans`. Which is fine, but it gets laborious if you do the same
-- for `ExceptT`, `StateT` and `WriterT`, even though the method implementations
-- are exactly the same. `TransT` allows you to write one `MonadTrans`-based
-- instance, which can then be used with `DerivingVia` to use that one
-- implementation for all monad transformers that use that same lifting
-- implementation.
newtype TransT t (m :: Type -> Type) a = TransT (t m a)
deriving (Functor, Applicative, Monad, MonadTrans, MFunctor, MMonad)
6 changes: 2 additions & 4 deletions server/src-lib/Hasura/App.hs
Original file line number Diff line number Diff line change
Expand Up @@ -804,8 +804,6 @@ instance MonadMetadataStorage AppM where
clearActionData = runInSeparateTx . clearActionDataTx
setProcessingActionLogsToPending = runInSeparateTx . setProcessingActionLogsToPendingTx

instance MonadMetadataStorageQueryAPI AppM

--------------------------------------------------------------------------------
-- misc

Expand Down Expand Up @@ -891,7 +889,7 @@ runHGEServer ::
WS.MonadWSLog m,
MonadExecuteQuery m,
HasResourceLimits m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadResolveSource m,
MonadQueryTags m,
MonadEventLogCleanup m,
Expand Down Expand Up @@ -983,7 +981,7 @@ mkHGEServer ::
WS.MonadWSLog m,
MonadExecuteQuery m,
HasResourceLimits m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadResolveSource m,
MonadQueryTags m,
MonadEventLogCleanup m,
Expand Down
298 changes: 52 additions & 246 deletions server/src-lib/Hasura/Metadata/Class.hs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion server/src-lib/Hasura/RQL/DDL/Action.hs
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ runDropAction ::
( MonadError QErr m,
CacheRWM m,
MetadataM m,
MonadMetadataStorageQueryAPI m
MonadMetadataStorage m
) =>
DropAction ->
m EncJSON
Expand Down
14 changes: 7 additions & 7 deletions server/src-lib/Hasura/RQL/DDL/Metadata.hs
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ runClearMetadata ::
( MonadIO m,
CacheRWM m,
MetadataM m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadBaseControl IO m,
MonadReader r m,
MonadError QErr m,
Expand Down Expand Up @@ -195,7 +195,7 @@ runReplaceMetadata ::
MetadataM m,
MonadIO m,
MonadBaseControl IO m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadReader r m,
MonadError QErr m,
Has (HL.Logger HL.Hasura) r,
Expand All @@ -213,7 +213,7 @@ runReplaceMetadataV1 ::
MetadataM m,
MonadIO m,
MonadBaseControl IO m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadReader r m,
MonadError QErr m,
Has (HL.Logger HL.Hasura) r,
Expand All @@ -231,7 +231,7 @@ runReplaceMetadataV2 ::
MetadataM m,
MonadIO m,
MonadBaseControl IO m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadReader r m,
MonadError QErr m,
Has (HL.Logger HL.Hasura) r,
Expand All @@ -255,7 +255,7 @@ runReplaceMetadataV2' ::
MetadataM m,
MonadIO m,
MonadBaseControl IO m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadReader r m,
MonadError QErr m,
Has (HL.Logger HL.Hasura) r,
Expand Down Expand Up @@ -760,12 +760,12 @@ purgeMetadataObj = \case
}

runGetCatalogState ::
(MonadMetadataStorageQueryAPI m, MonadError QErr m) => GetCatalogState -> m EncJSON
(MonadMetadataStorage m, MonadError QErr m) => GetCatalogState -> m EncJSON
runGetCatalogState _ =
encJFromJValue <$> liftEitherM fetchCatalogState

runSetCatalogState ::
(MonadMetadataStorageQueryAPI m, MonadError QErr m) => SetCatalogState -> m EncJSON
(MonadMetadataStorage m, MonadError QErr m) => SetCatalogState -> m EncJSON
runSetCatalogState SetCatalogState {..} = do
liftEitherM $ updateCatalogState _scsType _scsState
pure successMsg
Expand Down
16 changes: 8 additions & 8 deletions server/src-lib/Hasura/RQL/DDL/ScheduledTrigger.hs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import System.Cron.Types (CronSchedule)
populateInitialCronTriggerEvents ::
( MonadIO m,
MonadError QErr m,
MonadMetadataStorageQueryAPI m
MonadMetadataStorage m
) =>
CronSchedule ->
TriggerName ->
Expand All @@ -54,7 +54,7 @@ runCreateCronTrigger ::
CacheRWM m,
MonadIO m,
MetadataM m,
MonadMetadataStorageQueryAPI m
MonadMetadataStorage m
) =>
CreateCronTrigger ->
m EncJSON
Expand Down Expand Up @@ -128,7 +128,7 @@ updateCronTrigger ::
CacheRWM m,
MonadIO m,
MetadataM m,
MonadMetadataStorageQueryAPI m
MonadMetadataStorage m
) =>
CronTriggerMetadata ->
m EncJSON
Expand All @@ -148,7 +148,7 @@ runDeleteCronTrigger ::
( MonadError QErr m,
CacheRWM m,
MetadataM m,
MonadMetadataStorageQueryAPI m
MonadMetadataStorage m
) =>
ScheduledTriggerName ->
m EncJSON
Expand All @@ -165,7 +165,7 @@ dropCronTriggerInMetadata name =
MetadataModifier $ metaCronTriggers %~ OMap.delete name

runCreateScheduledEvent ::
(MonadError QErr m, MonadMetadataStorageQueryAPI m) =>
(MonadError QErr m, MonadMetadataStorage m) =>
CreateScheduledEvent ->
m EncJSON
runCreateScheduledEvent scheduledEvent = do
Expand All @@ -181,15 +181,15 @@ checkExists name = do
"cron trigger with name: " <> triggerNameToTxt name <> " does not exist"

runDeleteScheduledEvent ::
(MonadMetadataStorageQueryAPI m, MonadError QErr m) => DeleteScheduledEvent -> m EncJSON
(MonadMetadataStorage m, MonadError QErr m) => DeleteScheduledEvent -> m EncJSON
runDeleteScheduledEvent DeleteScheduledEvent {..} = do
liftEitherM $ dropEvent _dseEventId _dseType
pure successMsg

runGetScheduledEvents ::
( MonadError QErr m,
CacheRM m,
MonadMetadataStorageQueryAPI m
MonadMetadataStorage m
) =>
GetScheduledEvents ->
m EncJSON
Expand All @@ -202,7 +202,7 @@ runGetScheduledEvents gse = do
runGetScheduledEventInvocations ::
( MonadError QErr m,
CacheRM m,
MonadMetadataStorageQueryAPI m
MonadMetadataStorage m
) =>
GetScheduledEventInvocations ->
m EncJSON
Expand Down
1 change: 0 additions & 1 deletion server/src-lib/Hasura/RQL/DDL/Schema/Cache.hs
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,6 @@ newtype CacheRWT m a
MonadError e,
UserInfoM,
MonadMetadataStorage,
MonadMetadataStorageQueryAPI,
Tracing.MonadTrace,
MonadBase b,
MonadBaseControl b,
Expand Down
8 changes: 4 additions & 4 deletions server/src-lib/Hasura/Server/API/Metadata.hs
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ runMetadataQuery ::
MonadBaseControl IO m,
HasAppEnv m,
Tracing.MonadTrace m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadResolveSource m,
MonadEventLogCleanup m,
ProvidesHasuraServices m,
Expand Down Expand Up @@ -610,7 +610,7 @@ runMetadataQueryM ::
Tracing.MonadTrace m,
UserInfoM m,
MetadataM m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
HasServerConfigCtx m,
MonadReader r m,
Has (L.Logger L.Hasura) r,
Expand Down Expand Up @@ -642,7 +642,7 @@ runMetadataQueryV1M ::
Tracing.MonadTrace m,
UserInfoM m,
MetadataM m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
HasServerConfigCtx m,
MonadReader r m,
Has (L.Logger L.Hasura) r,
Expand Down Expand Up @@ -819,7 +819,7 @@ runMetadataQueryV2M ::
CacheRWM m,
MonadBaseControl IO m,
MetadataM m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadReader r m,
Has (L.Logger L.Hasura) r,
MonadError QErr m,
Expand Down
4 changes: 2 additions & 2 deletions server/src-lib/Hasura/Server/API/Query.hs
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ runQuery ::
HasAppEnv m,
Tracing.MonadTrace m,
MonadBaseControl IO m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadResolveSource m,
MonadQueryTags m,
MonadEventLogCleanup m,
Expand Down Expand Up @@ -394,7 +394,7 @@ runQueryM ::
HasServerConfigCtx m,
Tracing.MonadTrace m,
MetadataM m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadQueryTags m,
MonadReader r m,
MonadError QErr m,
Expand Down
9 changes: 4 additions & 5 deletions server/src-lib/Hasura/Server/App.hs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,6 @@ newtype Handler m a = Handler (ReaderT HandlerCtx (ExceptT QErr m) a)
GH.MonadExecuteQuery,
MonadMetadataApiAuthorization,
MonadMetadataStorage,
MonadMetadataStorageQueryAPI,
ProvidesNetwork,
MonadGetApiTimeLimit
)
Expand Down Expand Up @@ -421,7 +420,7 @@ v1QueryHandler ::
MonadMetadataApiAuthorization m,
MonadTrace m,
MonadReader HandlerCtx m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadResolveSource m,
HasAppEnv m,
MonadQueryTags m,
Expand Down Expand Up @@ -453,7 +452,7 @@ v1MetadataHandler ::
MonadBaseControl IO m,
MonadReader HandlerCtx m,
MonadTrace m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadResolveSource m,
MonadMetadataApiAuthorization m,
MonadEventLogCleanup m,
Expand Down Expand Up @@ -724,7 +723,7 @@ mkWaiApp ::
MonadTrace m,
GH.MonadExecuteQuery m,
HasResourceLimits m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadResolveSource m,
MonadQueryTags m,
MonadEventLogCleanup m,
Expand Down Expand Up @@ -768,7 +767,7 @@ httpApp ::
MonadExecutionLog m,
MonadTrace m,
GH.MonadExecuteQuery m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
HasResourceLimits m,
MonadResolveSource m,
MonadQueryTags m,
Expand Down
3 changes: 1 addition & 2 deletions server/test-postgres/Test/Hasura/Server/MigrateSuite.hs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ newtype CacheRefT m a = CacheRefT {runCacheRefT :: (ServerConfigCtx, MVar Rebuil
MonadTx,
UserInfoM,
MonadMetadataStorage,
MonadMetadataStorageQueryAPI,
MonadResolveSource,
ProvidesNetwork,
MonadGetApiTimeLimit
Expand Down Expand Up @@ -112,7 +111,7 @@ suite ::
MonadError QErr m,
MonadBaseControl IO m,
MonadResolveSource m,
MonadMetadataStorageQueryAPI m,
MonadMetadataStorage m,
MonadEventLogCleanup m,
ProvidesNetwork m,
MonadGetApiTimeLimit m
Expand Down

0 comments on commit 7cc33dd

Please sign in to comment.