graphql-engine/server/src-lib/Hasura/RQL/DDL/Endpoint.hs
Tom Harding b6799f0882 Import InsOrdHashMap, not OMap, OM, Map, HM, ...
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/8946
GitOrigin-RevId: 434e7c335bc69119020dd35761c7d4539bc51ff8
2023-04-27 07:43:22 +00:00

64 lines
1.7 KiB
Haskell

module Hasura.RQL.DDL.Endpoint
( runCreateEndpoint,
runDropEndpoint,
dropEndpointInMetadata,
)
where
import Data.HashMap.Strict.InsOrd qualified as InsOrdHashMap
import Data.Text.Extended
import Hasura.Base.Error
import Hasura.EncJSON
import Hasura.Prelude
import Hasura.RQL.Types.Common
import Hasura.RQL.Types.Endpoint
import Hasura.RQL.Types.Metadata
import Hasura.RQL.Types.Metadata.Object
import Hasura.RQL.Types.SchemaCache.Build
runCreateEndpoint ::
( MonadError QErr m,
CacheRWM m,
MetadataM m
) =>
CreateEndpoint ->
m EncJSON
runCreateEndpoint endpoint@EndpointMetadata {..} = do
endpointsMap <- _metaRestEndpoints <$> getMetadata
InsOrdHashMap.lookup _ceName endpointsMap `for_` \_ ->
throw400 AlreadyExists $
"Endpoint with name: " <> toTxt _ceName <> " already exists"
withNewInconsistentObjsCheck $
buildSchemaCacheFor (MOEndpoint _ceName) $
MetadataModifier $
metaRestEndpoints %~ InsOrdHashMap.insert _ceName endpoint
return successMsg
runDropEndpoint ::
( MonadError QErr m,
CacheRWM m,
MetadataM m
) =>
DropEndpoint ->
m EncJSON
runDropEndpoint DropEndpoint {..} = do
checkExists _deName
withNewInconsistentObjsCheck $
buildSchemaCache $
dropEndpointInMetadata _deName
return successMsg
dropEndpointInMetadata :: EndpointName -> MetadataModifier
dropEndpointInMetadata name =
MetadataModifier $ metaRestEndpoints %~ InsOrdHashMap.delete name
checkExists :: (MetadataM m, MonadError QErr m) => EndpointName -> m ()
checkExists name = do
endpointsMap <- _metaRestEndpoints <$> getMetadata
void $
onNothing (InsOrdHashMap.lookup name endpointsMap) $
throw400 NotExists $
"endpoint with name: " <> toTxt name <> " does not exist"