graphql-engine/server/src-lib/Hasura/RQL/DDL/Endpoint.hs
Lyndon Maydwell 0767333597 server: support restified versions of graphql queries (#303)
Restified GraphQL Endpoints feature.

GitOrigin-RevId: 3d6e589426ec21a60a915b47f579f0ac4934af45
2021-01-29 01:03:35 +00:00

60 lines
1.6 KiB
Haskell

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