-- | Accounts API endpoints

{-# OPTIONS_HADDOCK hide #-}

module Blockfrost.API.Cardano.Accounts
  where

import Servant.API
import Servant.API.Generic

import Blockfrost.Types.Cardano.Accounts
import Blockfrost.Types.Shared
import Blockfrost.Util.Pagination
import Blockfrost.Util.Sorting

data AccountsAPI route =
  AccountsAPI
    {
      forall route.
AccountsAPI route
-> route
   :- (Summary "Specific account address"
       :> (Description
             "Obtain information about a specific stake account."
           :> (Capture "stake_address" Address :> Get '[JSON] AccountInfo)))
_account
        :: route
        :- Summary "Specific account address"
        :> Description "Obtain information about a specific stake account."
        :> Capture "stake_address" Address
        :> Get '[JSON] AccountInfo
    , forall route.
AccountsAPI route
-> route
   :- (Summary "Specific reward history"
       :> (Description
             "Obtain information about the reward history of a specific account."
           :> (Capture "stake_address" Address
               :> ("rewards"
                   :> (Pagination :> (Sorting :> Get '[JSON] [AccountReward]))))))
_accountRewards
        :: route
        :- Summary "Specific reward history"
        :> Description "Obtain information about the reward history of a specific account."
        :> Capture "stake_address" Address
        :> "rewards"
        :> Pagination
        :> Sorting
        :> Get '[JSON] [AccountReward]
     , forall route.
AccountsAPI route
-> route
   :- (Summary "Account history"
       :> (Description
             "Obtain information about the history of a specific account."
           :> (Capture "stake_address" Address
               :> ("history"
                   :> (Pagination :> (Sorting :> Get '[JSON] [AccountHistory]))))))
_accountHistory
        :: route
        :- Summary "Account history"
        :> Description "Obtain information about the history of a specific account."
        :> Capture "stake_address" Address
        :> "history"
        :> Pagination
        :> Sorting
        :> Get '[JSON] [AccountHistory]
     , forall route.
AccountsAPI route
-> route
   :- (Summary "Account delegation history"
       :> (Description
             "Obtain information about the delegation of a specific account."
           :> (Capture "stake_address" Address
               :> ("delegations"
                   :> (Pagination :> (Sorting :> Get '[JSON] [AccountDelegation]))))))
_accountDelegations
        :: route
        :- Summary "Account delegation history"
        :> Description "Obtain information about the delegation of a specific account."
        :> Capture "stake_address" Address
        :> "delegations"
        :> Pagination
        :> Sorting
        :> Get '[JSON] [AccountDelegation]
     , forall route.
AccountsAPI route
-> route
   :- (Summary "Account registration history"
       :> (Description
             "Obtain information about the registrations and deregistrations of a specific account."
           :> (Capture "stake_address" Address
               :> ("registrations"
                   :> (Pagination
                       :> (Sorting :> Get '[JSON] [AccountRegistration]))))))
_accountRegistrations
        :: route
        :- Summary "Account registration history"
        :> Description "Obtain information about the registrations and deregistrations of a specific account."
        :> Capture "stake_address" Address
        :> "registrations"
        :> Pagination
        :> Sorting
        :> Get '[JSON] [AccountRegistration]
     , forall route.
AccountsAPI route
-> route
   :- (Summary "Account withdrawal history"
       :> (Description
             "Obtain information about the withdrawals of a specific account."
           :> (Capture "stake_address" Address
               :> ("withdrawals"
                   :> (Pagination :> (Sorting :> Get '[JSON] [AccountWithdrawal]))))))
_accountWithdrawals
        :: route
        :- Summary "Account withdrawal history"
        :> Description "Obtain information about the withdrawals of a specific account."
        :> Capture "stake_address" Address
        :> "withdrawals"
        :> Pagination
        :> Sorting
        :> Get '[JSON] [AccountWithdrawal]
     , forall route.
AccountsAPI route
-> route
   :- (Summary "Account MIR history"
       :> (Description
             "Obtain information about the MIRs of a specific account."
           :> (Capture "stake_address" Address
               :> ("mirs"
                   :> (Pagination :> (Sorting :> Get '[JSON] [AccountMir]))))))
_accountMirs
        :: route
        :- Summary "Account MIR history"
        :> Description "Obtain information about the MIRs of a specific account."
        :> Capture "stake_address" Address
        :> "mirs"
        :> Pagination
        :> Sorting
        :> Get '[JSON] [AccountMir]
     , forall route.
AccountsAPI route
-> route
   :- (Summary "Account associated addresses"
       :> (Description
             "Obtain information about the addresses of a specific account."
           :> (Capture "stake_address" Address
               :> ("addresses"
                   :> (Pagination :> (Sorting :> Get '[JSON] [AddressAssociated]))))))
_accountAssociatedAddresses
        :: route
        :- Summary "Account associated addresses"
        :> Description "Obtain information about the addresses of a specific account."
        :> Capture "stake_address" Address
        :> "addresses"
        :> Pagination
        :> Sorting
        :> Get '[JSON] [AddressAssociated]
     , forall route.
AccountsAPI route
-> route
   :- (Summary "Assets associated with the account addresses"
       :> (Description
             "Obtain information about assets associated with addresses of a specific account."
           :> (Capture "stake_address" Address
               :> ("addresses"
                   :> ("assets"
                       :> (Pagination :> (Sorting :> Get '[JSON] [Amount])))))))
_accountAssociatedAssets
        :: route
        :- Summary "Assets associated with the account addresses"
        :> Description "Obtain information about assets associated with addresses of a specific account."
        :> Capture "stake_address" Address
        :> "addresses"
        :> "assets"
        :> Pagination
        :> Sorting
        :> Get '[JSON] [Amount]
    } deriving (forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall route x. Rep (AccountsAPI route) x -> AccountsAPI route
forall route x. AccountsAPI route -> Rep (AccountsAPI route) x
$cto :: forall route x. Rep (AccountsAPI route) x -> AccountsAPI route
$cfrom :: forall route x. AccountsAPI route -> Rep (AccountsAPI route) x
Generic)