diff options
Diffstat (limited to 'backend/lib/ACMS/API/REST')
-rw-r--r-- | backend/lib/ACMS/API/REST/Collection/Paginated.hs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/backend/lib/ACMS/API/REST/Collection/Paginated.hs b/backend/lib/ACMS/API/REST/Collection/Paginated.hs new file mode 100644 index 0000000..ad98888 --- /dev/null +++ b/backend/lib/ACMS/API/REST/Collection/Paginated.hs @@ -0,0 +1,32 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} + +module ACMS.API.REST.Collection.Paginated where + +import ACMS.API.REST (APIMonad, fetch, restRequest) +import Collection +import Data.Aeson qualified as A +import Data.Function ((&)) +import GHC.Generics (Generic) +import Text.Printf (printf) + +data Pagination = Pagination + { limit :: Int, + offset :: Int + } + +data Paginated a = Paginated + { count :: Int, + data_ :: [a] + } + deriving (Eq, Show, Generic) + +instance (A.FromJSON a) => A.FromJSON (Paginated a) + +instance (A.ToJSON a) => A.ToJSON (Paginated a) + +list :: (APIMonad m) => Pagination -> Collection -> m (Paginated A.Object) +list p c = + restRequest (printf "/collection/%s/paginated/%d/%d" c.name p.limit p.offset) + & fetch + >>= A.throwDecode |