graphql-engine/server/src-gdw-api/Hasura/Backends/DataWrapper/API/V0/OrderBy.hs
Daniel Chambers a70e4979ee Moved GDW API types into their own internal lib
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/4120
GitOrigin-RevId: e7688fdc5a5621c0b760c9169ebf61ce2aea4913
2022-04-01 01:21:29 +00:00

54 lines
1.5 KiB
Haskell

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedLists #-}
--
module Hasura.Backends.DataWrapper.API.V0.OrderBy
( OrderBy (..),
OrderType (..),
)
where
--------------------------------------------------------------------------------
import Autodocodec.Extended
import Autodocodec.OpenAPI ()
import Control.DeepSeq (NFData)
import Data.Aeson (FromJSON, ToJSON)
import Data.Data (Data)
import Data.Hashable (Hashable)
import Data.OpenApi (ToSchema)
import GHC.Generics (Generic)
import Hasura.Backends.DataWrapper.API.V0.Column qualified as API.V0
import Prelude
--------------------------------------------------------------------------------
data OrderBy = OrderBy
{ column :: API.V0.ColumnName,
ordering :: OrderType
}
deriving stock (Data, Eq, Generic, Ord, Show)
deriving anyclass (Hashable, NFData)
deriving (FromJSON, ToJSON, ToSchema) via Autodocodec OrderBy
instance HasCodec OrderBy where
codec =
object "OrderBy" $
OrderBy
<$> requiredField "column" "Column to order by" .= column
<*> requiredField "ordering" "Ordering" .= ordering
--------------------------------------------------------------------------------
data OrderType
= Ascending
| Descending
deriving stock (Data, Eq, Generic, Ord, Show, Enum, Bounded)
deriving anyclass (Hashable, NFData)
deriving (FromJSON, ToJSON, ToSchema) via Autodocodec OrderType
instance HasCodec OrderType where
codec =
named "OrderType" $
disjointStringConstCodec [(Ascending, "asc"), (Descending, "desc")]