packages feed

morpheus-graphql-server-0.28.2: test/Feature/Collision/CategoryCollisionSuccess.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}

module Feature.Collision.CategoryCollisionSuccess
  ( api,
  )
where

import Data.Kind (Type)
import Data.Morpheus.Server (interpreter)
import Data.Morpheus.Server.Types
  ( GQLRequest,
    GQLResponse,
    GQLType (..),
    InputTypeNamespace (..),
    RootResolver (..),
    Undefined,
    defaultRootResolver,
    typeDirective,
  )
import Data.Text
  ( Text,
  )
import GHC.Generics (Generic)

data Deity = Deity
  { name :: Text,
    age :: Int
  }
  deriving (Show, Generic)

instance GQLType Deity where
  directives _ =
    typeDirective InputTypeNamespace {inputTypeNamespace = "Input"}

newtype DeityArgs = DeityArgs
  { input :: Deity
  }
  deriving
    ( Show,
      Generic,
      GQLType
    )

newtype Query (m :: Type -> Type) = Query
  { deity :: DeityArgs -> m Deity
  }
  deriving
    ( Generic,
      GQLType
    )

rootResolver :: RootResolver IO () Query Undefined Undefined
rootResolver =
  defaultRootResolver
    { queryResolver =
        Query
          { deity =
              const
                $ pure
                  Deity
                    { name =
                        "Morpheus",
                      age = 1000
                    }
          }
    }

api :: GQLRequest -> IO GQLResponse
api = interpreter rootResolver